+++ /dev/null
-*.lo
-*.o
-.deps/
-.libs/
-po/*.gmo
-po/messages.mo
-/aclocal.m4
-/autom4te.cache
-/config.h.in
-/config.h
-/config.log
-/config.status
-/configure
-/libtool
-/stamp-h1
-/Makefile.in
-/VERSION
-cipher/Makefile.in
-cipher/gost-s-box
-cipher/gost-sb.h
-compat/Makefile.in
-doc/Makefile.in
-m4/Makefile.in
-mpi/Makefile.in
-random/Makefile.in
-src/Makefile.in
-tests/Makefile.in
-/Makefile
-m4/Makefile
-cipher/Makefile
-cipher/libcipher.la
-compat/Makefile
-compat/libcompat.la
-doc/gcrypt.info
-doc/gcrypt.info-1
-doc/gcrypt.info-2
-doc/stamp-vti
-doc/version.texi
-doc/Makefile
-doc/fips-fsm.eps
-doc/fips-fsm.pdf
-doc/fips-fsm.png
-doc/hmac256.1
-doc/libgcrypt-modules.eps
-doc/libgcrypt-modules.pdf
-doc/libgcrypt-modules.png
-doc/yat2m
-doc/yat2m-stamp
-mpi/Makefile
-mpi/asm-syntax.h
-mpi/libmpi.la
-mpi/mod-source-info.h
-mpi/mpi-asm-defs.h
-mpi/mpih-add1-asm.S
-mpi/mpih-lshift-asm.S
-mpi/mpih-mul1-asm.S
-mpi/mpih-mul2-asm.S
-mpi/mpih-mul3-asm.S
-mpi/mpih-rshift-asm.S
-mpi/mpih-sub1-asm.S
-mpi/sysdep.h
-random/Makefile
-random/librandom.la
-src/Makefile
-src/dumpsexp
-src/gcrypt.h
-src/hmac256
-src/libgcrypt-config
-src/libgcrypt.la
-src/libgcrypt.pc
-src/mpicalc
-src/versioninfo.rc
-src/*.exe
-tests/Makefile
-tests/ac
-tests/ac-data
-tests/ac-schemes
-tests/aeswrap
-tests/basic
-tests/basic-disable-all-hwf
-tests/bench-slope
-tests/benchmark
-tests/curves
-tests/dsa-rfc6979
-tests/fips186-dsa
-tests/fipsdrv
-tests/gchash
-tests/genhashdata
-tests/hashtest
-tests/hashtest-256g
-tests/hmac
-tests/keygen
-tests/keygrip
-tests/mpitests
-tests/pkcs1v2
-tests/prime
-tests/pubkey
-tests/random
-tests/register
-tests/rsacvt
-tests/t-convert
-tests/t-cv25519
-tests/t-ed25519
-tests/t-kdf
-tests/t-lock
-tests/t-mpi-bit
-tests/t-mpi-point
-tests/t-sexp
-tests/t-secmem
-tests/t-x448
-tests/tsexp
-tests/version
-tests/*.exe
+++ /dev/null
-Dmitry Baryshkov <dbaryshkov@gmail.com>
Copyright (C) 2003 Nikos Mavroyanopoulos
Copyright (c) 2006 CRYPTOGAMS
Copyright (C) 2006-2007 NTT (Nippon Telegraph and Telephone Corporation)
- Copyright (C) 2012-2022 g10 Code GmbH
+ Copyright (C) 2012-2023 g10 Code GmbH
Copyright (C) 2012 Simon Josefsson, Niels Möller
Copyright (c) 2012 Intel Corporation
Copyright (C) 2013 Christian Grothoff
-No more ChangeLog files
-========================
+2023-11-14 Werner Koch <wk@gnupg.org>
-Do not modify any of the ChangeLog files in Libgcrypt. Starting on
-December 1st, 2011 we put change information only in the GIT commit
-log, and generate a top-level ChangeLog file from logs at "make dist"
-time. As such, there are strict requirements on the form of the
-commit log messages. See doc/HACKING for details. The old ChangeLog
-files have all be renamed to ChangeLog-2011.
+ Release 1.10.3.
+ + commit aa1610866f8e42bdc272584f0a717f32ee050a22
+2023-11-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
-Local Variables:
-buffer-read-only: t
-mode: text
-End:
+ mpih_mod: avoid unintentional conditional branch.
+ + commit 11973c2219da0f732338cf080a4edeb6a89c313e
+ * mpi/mpih-const-time.c (_gcry_mpih_mod): Avoid conditional branch
+ on the_bit extraction.
+
+ mpih-const-time: use constant-time comparisons conditional add/sub/abs.
+ + commit 74588de441fd98f6dd99132e67e0c2632cb2a6bd
+ * mpi/mpih-const-time.c (mpih_ct_limb_greater_than)
+ (mpih_ct_limb_less_than): New.
+ (_gcry_mpih_add_n_cond, _gcry_mpih_sub_n_cond, _gcry_mpih_abs_cond): Use
+ mpih_ct_limb_greater_than and mpih_ct_limb_less_than for comparisons.
+
+ const-time: add functions for generating masks from 0/1 input.
+ + commit 01e7052cb245619280769f683d697d6b2f68e041
+ * mpi/ec-nist.c (_gcry_mpi_ec_nist192_mod, _gcry_mpi_ec_nist224_mod)
+ (_gcry_mpi_ec_nist256_mod, _gcry_mpi_ec_nist384_mod): Use mask
+ generating functions.
+ * mpi/mpi-internal.h (ct_limb_gen_mask, ct_limb_gen_inv_mask): New.
+ * mpi/mpih-const-time.c (_gcry_mpih_set_cond, _gcry_mpih_add_n_cond)
+ (_gcry_mpih_sub_n_cond, _gcry_mpih_sub_n_cond, _gcry_mpih_swap_cond):
+ Use mask generating functions.
+ * mpi/mpiutil.c (_gcry_mpi_set_cond, _gcry_mpi_swap_cond): Use mask
+ generating functions.
+ * src/const-time.h (DEFINE_CT_TYPE_GEN_MASK, ct_uintptr_gen_mask)
+ (ct_ulong_gen_mask, DEFINE_CT_TYPE_GEN_INV_MASK)
+ (ct_uintptr_gen_inv_mask, ct_ulong_gen_inv_mask): New.
+ (DEFINE_CT_TYPE_SELECT_FUNC): Use mask generating functions.
+ * src/const-time.c (_gcry_ct_memmov_cond): Use mask generating
+ functions.
+
+ ec: avoid unintentional condition branches for 25519, 448 and 256k1.
+ + commit 237523b49f423be66261fa769e4558a36b84d15f
+ * mpi/ec.c (ec_addm_25519, ec_subm_25519, ec_mulm_25519, ec_addm_448)
+ (ec_subm_448, ec_mulm_448, ec_secp256k1_mod): Use mpih_limb_is_zero
+ and mpih_limb_is_not_zero instead of comparison to zero.
+
+ ec-nist: avoid unintentional conditional branch by comparison.
+ + commit 2ed34074474650a50592fa86d9639614aa86476b
+ * mpi/ec-nist.c (_gcry_mpi_ec_nist521_mod): Use mpih_limb_is_not_zero.
+ * mpi/mpi-internal.h (mpih_limb_is_not_zero): New.
+
+ mpih_cmp_ui: avoid unintentional conditional branch.
+ + commit 9acddd8b95e14fb7c82c96881c1ac9000a46d703
+ * mpi/mpi-internal.h (mpih_limb_is_zero): New.
+ * mpi/mpih-const-time.c (_gcry_mpih_cmp_ui): Use mpih_limb_is_zero
+ instead of comparison.
+
+ ec-nist: use global vone and vzero.
+ + commit 610667fb2558ac5aae1393b99ceec3e50199e901
+ * mpi/ec-nist.c (vzero, vone): Remove.
+ (_gcry_mpi_ec_nist192_mod, _gcry_mpi_ec_nist224_mod)
+ (_gcry_mpi_ec_nist256_mod, _gcry_mpi_ec_nist384_mod): Use _gcry_ct_vzero
+ and _gcry_ct_vone.
+
+ mpiutil: use global vone and vzero.
+ + commit 6377725ed01e090bea1223256f58eae0bfcc2021
+ * mpi/mpiutil.c (_gcry_mpi_set_cond, _gcry_mpi_swap_cond): Use
+ _gcry_ct_vzero and _gcry_ct_vone.
+
+ mpih-const-time: use global vzero/vone variable.
+ + commit 15cd08ae4c1e7fccda89a42bb3e87f15dab4452f
+ * mpi/mpih-const-time.c (vzero, vone): Remove.
+ (_gcry_mpih_set_cond, _gcry_mpih_add_n_cond, _gcry_mpih_sub_n_cond)
+ (_gcry_mpih_swap_cond, _gcry_mpih_abs_cond): Use _gcry_ct_vzero and
+ _gcry_ct_vone.
+
+2023-11-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ const-time: ct_memmov_cond: switch to use dual mask approach.
+ + commit 9c0984ed2c553289a744197791a6683f4bd2ce18
+ * src/const-time.c (_gcry_ct_memmov_cond): Use dual mask + AND/OR
+ instead of single mask + XOR.
+
+ const-time: prefix global symbols with _gcry_
+ + commit 3fa1b81c92e5694ef0f2d01885eccbbc9944d267
+ * cipher/const-time.c (ct_not_memequal, ct_memequal)
+ (ct_memmov_cond): Rename these to ...
+ (_gcry_ct_not_memequal, _gcry_ct_memequal)
+ (_gcry_ct_memmov_cond): ... these.
+ * cipher/const-time.h (ct_not_memequal, ct_memequal)
+ (ct_memmov_cond): Rename these to ...
+ (_gcry_ct_not_memequal, _gcry_ct_memequal)
+ (_gcry_ct_memmov_cond): ... these.
+ (ct_not_memequal, ct_memequal, ct_memmov_cond): New macros.
+
+ mpih_set_cond: restore EM leakage mitigation.
+ + commit 7f0eb519897b05e41fe43b0981453181266d457c
+ * mpi/mpih-const-time.c (_gcry_mpih_set_cond): Replace single mask + XOR
+ with dual mask + AND/OR; Add comment about reason for dual mask usage.
+ (_gcry_mpih_add_n_cond, _gcry_mpih_sub_n_cond, _gcry_mpih_swap_cond)
+ (_gcry_mpih_abs_cond): Add comment about reason for dual mask usage.
+
+ rsa, elgamal: avoid logical not operator in constant-time code.
+ + commit 3583e2ebcad55bde178acc7a862cda30d1f2cd97
+ * cipher/elgamal.c (elg_decrypt): Replace ! operator with calls to
+ ct_is_not_zero/ct_is_zero/ct_ulong_select.
+ * cipher/rsa-common.c (_gcry_rsa_pkcs1_decode_for_enc): Replace !
+ operator with call to ct_is_zero.
+ * cipher/rsa.c (rsa_decrypt): Replace ! operator with calls to
+ ct_is_not_zero/ct_is_zero/ct_ulong_select.
+ * src/const-time.c (_gcry_ct_vzero, _gcry_ct_vone): New.
+ * src/const-time.h (_gcry_ct_vzero, _gcry_ct_vone): New.
+ (ct_is_not_zero, ct_is_zero, DEFINE_CT_TYPE_SELECT_FUNC)
+ (ct_uintptr_select, ct_ulong_select): New.
+ (sexp_null_cond): Use ct_uintptr_select.
+
+ const-time: always avoid comparison operator for byte comparison.
+ + commit 5e9ba851948f97cd3fb70de474b87609b150d06a
+ * configure.ac: Remove POSSIBLE_CONDITIONAL_BRANCH_IN_BYTE_COMPARISON
+ macro.
+ * src/const-time.h (ct_not_equal_byte): Remove
+ POSSIBLE_CONDITIONAL_BRANCH_IN_BYTE_COMPARISON ifdef.
+
+ Use single constant-time memory comparison implementation.
+ + commit 892bc25ff74b1fb84259babd4292da399dc3b185
+ * src/const-time.c (ct_not_memequal): Use original 'buf_eq_const'
+ implementation here.
+ (ct_memequal): New.
+ * cipher/bufhelp.h (buf_eq_const): Call to 'ct_memequal'.
+
+2023-11-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Fix ElGamal decryption.
+ + commit 2839aaee3e6eed6a96f0a798b02eef7e0302c7e7
+ * cipher/elgamal.c (elg_decrypt): Call sexp_build always.
+ * cipher/rsa.c (rsa_decrypt): Return an error code of sexp_build
+ when RC != 0.
+
+ rsa: Use memmov_independently when unpadding.
+ + commit c98b5e4a147170d578504498ba355a77de00b0f1
+ * cipher/rsa-common.c (memmov_independently): New.
+ (_gcry_rsa_pkcs1_decode_for_enc): Use memmov_independently.
+ (_gcry_rsa_oaep_decode): Use memmov_independently.
+
+ const-time: Add ct_memmov_cond, fix _gcry_mpih_set_cond.
+ + commit 45945be8f3c3a77ce3e86ebda7d814defcd3f76b
+ * src/const-time.c (ct_memmov_cond): New.
+ * src/const-time.h (ct_memmov_cond): New.
+ * mpi/mpih-const-time.c (_gcry_mpih_set_cond): Use XOR and a MASK.
+
+ const-time: Use ct_not_memequal, instead. Tested with AVR.
+ + commit e8072d8d32558c289ad4cf7b5be26a25eda03c20
+ * cipher/rsa-common.c (_gcry_rsa_oaep_decode): Use ct_not_memequal.
+ * src/const-time.c (ct_not_memequal): Use ct_not_equal_byte.
+ * src/const-time.h (ct_not_memequal): Rename from ct_memequal.
+
+ build: Check if arch is VAX or compiler is MSVC.
+ + commit fee1e63c7286cb12ff973ea446bc019f575887d2
+ * configure.ac (AH_BOTTOM): Add check for VAX and MSVC.
+ * src/const-time.h (POSSIBLE_CONDITIONAL_BRANCH_IN_BYTE_COMPARISON):
+ Rename.
+
+ rsa: Fix decoding of PKCS#1 v1.5 and OAEP padding.
+ + commit 45c9920201687754719ddc15a88a25018a552695
+ * src/Makefile.am (libgcrypt_la_SOURCES): Add const-time.h and
+ const-time.c.
+ * src/const-time.h (ct_not_equal_byte, sexp_null_cond): New.
+ (ct_memequal): New from NetBSD, modified return type and name.
+ * src/const-time.c: New.
+ * cipher/rsa-common.c (_gcry_rsa_pkcs1_decode_for_enc): Examine whole
+ sequence of the byte-array. Use N0 to find the separator position, with
+ ct_not_equal_byte. Return the MPI even when the case of an error.
+ * cipher/rsa-common.c (_gcry_rsa_oaep_decode): Use ct_memequal to
+ check LHASH. Examine all the sequence of the byte-array. Use N1 to
+ find the separator of 0x01. Return the MPI even when the case of an
+ error.
+ * cipher/rsa.c (rsa_decrypt): Always build a SEXP.
+
+2023-10-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ sexp: String with \0 is considered "binary".
+ + commit 49e1e67f4e4e9f520586dc4ea8a8f2630bbf6e9c
+ * src/sexp.c (suitable_encoding): It's "binary" when
+ the buffer contains '\0'.
+
+2023-09-01 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Change the default for --with-libtool-modification.
+ + commit 09ab619488455b0f9f27f2c8291ea646b089c13e
+ * configure.ac (--with-libtool-modification): default=never.
+
+2023-08-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: New configure option --with-libtool-modification.
+ + commit 0ddc823e331c2a38b71f887abc917d8a5a9003af
+ * Makefile.am (EXTRA_DIST): Add build-aux/libtool-patch.sed.
+ * build-aux/libtool-patch.sed: New.
+ * configure.ac (--with-libtool-modification): New.
+
+2023-07-14 Bernhard Reiter <bernhard@intevation.de>
+
+ build: Fix the notice in configure.ac.
+ + commit c8ee15dfe8696c58ba493b118f6eff1c095e02ae
+ * configure.ac: Fix typo.
+
+2023-06-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher:pubkey: Check digest size which should not be zero.
+ + commit 8cdd0d353e19a4514dfe3c99146d17f07bf0fb4d
+ * cipher/pubkey.c (gcry_pk_sign_md): Check the digest size
+ before calling _gcry_md_read.
+
+2023-06-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Allow KDF measurement in FIPS mode.
+ + commit 5547e5255c465e99ccd3ffce2b7622e75f2d89a4
+ * tests/bench-slope.c (bench_kdf_init): Tweak the iterations in FIPS
+ mode.
+ (bench_kdf_do_bench): Use larger values to avoid rejection in FIPS
+ mode.
+
+ cipher:kdf: Move FIPS mode check to _gcry_kdf_derive.
+ + commit 2c8562ca5a49edc0c82c8c4775edebabc31cf09e
+ * cipher/kdf.c (_gcry_kdf_pkdf2): Move the checks to...
+ (_gcry_kdf_derive): ... here.
+
+ Remove out of core handler setting message in FIPS mode.
+ + commit d37ad2823f849ce71b509245ecc169835cf80d1e
+ * src/global.c (_gcry_set_outofcore_handler): Don't call log_info.
+
+ cipher:ecc: Fix an error-path to release the KEY correctly.
+ + commit 31adc78fa503be388af430e9b218a83fb4b1ea7f
+ * cipher/ecc.c (ecc_generate): Set *R_SKEY to NULL.
+
+2023-06-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher:pubkey: Fix non-use of flexible array member.
+ + commit 297c5a47837cfd94ed5b317b45f6e776502dd2cd
+ * cipher/pubkey.c (struct pk_single_data): Use 1 as the size.
+ (_gcry_pk_single_data_push): Use offsetof.
+
+ cipher:ecc: Fix public key computation for EdDSA.
+ + commit b863ec507dae17fe2c38653e1ccf22de62b68ac4
+ * cipher/ecc-misc.c (_gcry_ecc_compute_public): Fix hard-coded length
+ for digest lower bits.
+
+2023-06-02 Werner Koch <wk@gnupg.org>
+
+ mpicalc: Allow for addm and subm.
+ + commit 2974a635e5d3ca477508527f5c401619879cb19f
+ * src/mpicalc.c (do_add, do_sub): Add arg usemod.
+ (main): Add oeprator 'M'.
+
+2023-04-21 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ doc: add documentation for GCRYCTL_SET_ALLOW_WEAK_KEY.
+ + commit 7cdfc869b7afa057839fd361bfff9140cfbe63ed
+ * doc/gcrypt.texi: Add 'GCRYCTL_SET_ALLOW_WEAK_KEY' under
+ 'gcry_cipher_ctl'.
+
+ Revert "cipher: Fix edge case for SET_ALLOW_WEAK_KEY."
+ + commit 9b1ee0574ed96800429aa9488b6dcb11a5407542
+ * cipher/cipher.c (cipher_setkey): Do not reset RC.
+
+2023-04-16 Werner Koch <wk@gnupg.org>
+
+ cipher: Fix edge case for SET_ALLOW_WEAK_KEY.
+ + commit b75a58df84a5137954cb678adf8c202b39ee1def
+ * cipher/cipher.c (cipher_setkey): Reset RC.
+
+2023-04-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Use getrandom only when it's appropriate.
+ + commit d41177937cea4aa1e9042ebcd195a349c40e8071
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random)
+ [GRND_RANDOM]: Conditionalize the use of getrandom, as it's
+ not a portable function.
+
+2023-04-06 Werner Koch <wk@gnupg.org>
+
+ Release 1.10.2.
+ + commit 1c5cbacf3d88dded5063e959ee68678ff7d0fa56
+
+
+2023-04-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Enable the fast path to ChaCha20 only when supported.
+ + commit 4128f73d3a83c7f901924488c3bbf047b75db20f
+ cipher/cipher-poly1305.c (_gcry_cipher_poly1305_encrypt)
+ (_gcry_cipher_poly1305_decrypt) [USE_CHACHA20]: Conditionalize.
+
+ build: Allow build with -Oz.
+ + commit f2ab06bc3cccd1f6c9a012275d90df9f3956572b
+ * cipher/Makefile.am [ENABLE_O_FLAG_MUNGING]: Support -Oz.
+ * random/Makefile.am [ENABLE_O_FLAG_MUNGING]: Support -Oz.
+
+2023-04-03 NIIBE Yutaka <gniibe@fsij.org>
+
+ m4: Update gpg-error.m4.
+ + commit c118a8ddd0224f951f26ae78d58d0eed5ee35779
+ * m4/gpg-error.m4: Update from libgpg-error master.
+
+2023-03-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: More elaborate way of getting FIPS pk flags indicators.
+ + commit f6f345fe89b0a61408bbc72058ab42ac6e6a7577
+ * src/fips.c (_gcry_fips_indicator_pk_flags): List more allowed string
+ in the S-expression.
+ * doc/gcrypt.texi: Add document for the FIPS service indicator
+ GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS with example.
+
+2023-03-23 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update gpg-error.m4.
+ + commit f815ae113a2a914b0d20f0eb36d91c0351d5a797
+ * m4/gpg-error.m4: Update from libgpg-error master.
+
+2023-03-14 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Improve test coverage for FIPS service indicators.
+ + commit 22cb410dd4456a84b5bde8be6a907afdc38a792b
+ * tests/basic.c (check_digests): Check the FIPS indicators.
+ (check_mac): Ditto.
+
+ fips: Explicitly disable overriding random in FIPS mode.
+ + commit 251f1749900e355ee6b027ee6a5c070eba16c85f
+ * src/fips.c: (_gcry_fips_indicator_function): Mark using random
+ override non-approved in FIPS mode.
+
+ fips: Mark gcry_pk_encrypt/decrypt function non-approved.
+ + commit 051bbe84d889b413f158c665e5cc25b26c820388
+ * src/fips.c (_gcry_fips_indicator_function): Add
+ gcry_pk_encrypt/decrypt as non-approved.
+
+ fips: Fix fips indicator function.
+ + commit 6805d76b7ed4886f00bf704c77b0549408097219
+ * src/fips.c (_gcry_fips_indicator_function): Fix typo in sign/verify
+ function names.
+
+ fips: Explicitly allow only some PK flags.
+ + commit 0b2b30c0c42fa2fea646a83a1f21a99f7a902853
+ * src/fips.c (_gcry_fips_indicator_pk_flags): New function for explicit
+ FIPS indicator for public key algorithm flags.
+ * src/g10lib.h (_gcry_fips_indicator_pk_flags): New.
+ * src/gcrypt.h.in (GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS): New.
+ * src/global.c (_gcry_vcontrol): Handle the new option.
+ * doc/gcrypt.texi: Document new options.
+
+2023-03-14 Tobias Heider <tobias.heider@canonical.com>
+
+ doc: Document the new FIPS indicators.
+ + commit fcb9ec67a11763ca10fa1b64166c206da95eb006
+ * doc/gcrypt.texi: Document the new options for FIPS indicators.
+
+2023-03-08 Tobias Heider <tobias.heider@canonical.com>
+
+ fips: Unblock MD5 in fips mode but mark non-approved in indicator.
+ + commit 0024db5afee825185ddf26cd9a91f563b8c11b1a
+ * cipher/mac-hmac.c (_gcry_mac_type_spec_hmac_md5): Allow in fips mode.
+ * cipher/md5.c (_gcry_digest_spec_md5): Allow in fips mode.
+
+ fips: Add explicit indicators for md and mac algorithms.
+ + commit a51f0e66842ae989cd3966e5ef5eb1f62a3576b1
+ * src/fips.c (_gcry_fips_indicator_mac): New function indicating
+ non-approved mac algorithms.
+ (_gcry_fips_indicator_md): new functions indicating non-approved
+ message digest algorithms.
+ * src/g10lib.h (_gcry_fips_indicator_mac): New function.
+ (_gcry_fips_indicator_md): Ditto.
+ * src/gcrypt.h.in (enum gcry_ctl_cmds): New symbols,
+ GCRYCTL_FIPS_SERVICE_INDICATOR_MAC and
+ GCRYCTL_FIPS_SERVICE_INDICATOR_MD.
+ * src/global.c (_gcry_vcontrol): Handle new FIPS indicators.
+
+2023-03-07 Jakub Jelen <jjelen@redhat.com>
+
+ kdf: Update tests in regards to the allowed parameters in FIPS mode.
+ + commit 397ff085749e5b47095827d19561332a67007c02
+ * cipher/kdf.c (check_one): run selftests for more approved parameters
+ and check that wrong parameters correctly fail in FIPS mode.
+
+ fips: Check return value from ftell.
+ + commit 076dd2ffcd953d80172770d8bb98c2c945dad7c9
+ * src/fips.c (get_file_offset): Check return value of ftell to be able
+ to detect errors.
+
+ random: Remove unused SHA384 DRBGs.
+ + commit 4cff7e739829294d5f4a364d35584b42ef81af9f
+ * random/random-drbg.c (global): Remove unused SHA384-based defines.
+ (drbg_cores): Remove SHA384 configurations.
+ (drbg_sec_strength): Remove unused SHA384.
+
+ visibility: Check FIPS operational status for MD+Sign operation.
+ + commit fc19b27b543910833096a738dae0703b3dc57d51
+ * src/visibility.c (gcry_pk_hash_sign): Check fips status before
+ calling the operation itself.
+ (gcry_pk_hash_verify): Ditto.
+
+ ecc: Make the PCT recoverable in FIPS mode and consistent with RSA.
+ + commit c41d4f502f1b8aa08b2a79cbee3c8cd73e73adbe
+ * cipher/ecc.c (test_keys_fips): Replace calls to log_fatal with
+ return code on error.
+ (ecc_generate): Signal error when PCT fails in FIPS mode.
+
+ ecc: Do not allow skipping tests in FIPS Mode.
+ + commit 44a3f26539f7e88a77bbf4fe5d35ddd24f87ffcd
+ * cipher/ecc.c (ecc_generate): Do not allow skipping tests PCT tests
+ in FIPS mode.
+
+2023-01-23 Jakub Jelen <jjelen@redhat.com>
+
+ fips: Remove GCM mode from the allowed FIPS indicators.
+ + commit 1540698389ba2091baab6e020e5ec7b0d0eead59
+ * src/fips.c (_gcry_fips_indicator_cipher): Do not mark GCM mode as
+ FIPS approved.
+
+2022-12-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix m4 macros for strict C compiler.
+ + commit b1a3424e7f8030361c2e4806920e60ec06c1d9e3
+ * m4/ax_cc_for_build.m4: Fix for no arg.
+ * m4/noexecstack.m4: Likewise.
+
+ build: Fix configure.ac for strict C99.
+ + commit 83ea195b61d571e48f53803d2d297ec02035ae36
+ * configure.ac: Add function declarations for asm functions.
+
+2022-12-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ t-rsa-testparm: fix 'function declaration isn’t a prototype' warning.
+ + commit bdeea2a53e9ef869caa2f8ae2dd876ad397aed12
+ * cipher/t-rsa-testparm.c (check_rsa_testparm): Define parameters as
+ void.
+
+2022-12-07 Jakub Jelen <jjelen@redhat.com>
+
+ fips,rsa: Prevent usage of X9.31 keygen in FIPS mode.
+ + commit 392e0ccd25f397d789a1cb59fae2f3faae46e78b
+ * cipher/rsa.c (rsa_generate): Do not accept use-x931 or derive-parms
+ in FIPS mode.
+ * tests/pubkey.c (get_keys_x931_new): Expect failure in FIPS mode.
+ (check_run): Skip checking X9.31 keys in FIPS mode.
+ * doc/gcrypt.texi: Document "test-parms" and clarify some cases around
+ the X9.31 keygen.
+
+2022-12-05 Jakub Jelen <jjelen@redhat.com>
+
+ rsa: Prevent usage of long salt in FIPS mode.
+ + commit fdd2a8b3329eb892f90d2cd803762ef06222c226
+ * cipher/rsa-common.c (_gcry_rsa_pss_encode): Prevent usage of large
+ salt lengths
+ (_gcry_rsa_pss_verify): Ditto.
+ * tests/basic.c (check_pubkey_sign): Check longer salt length fails in
+ FIPS mode
+ * tests/t-rsa-pss.c (one_test_sexp): Fix function name in error message
+
+2022-11-18 Jakub Jelen <jjelen@redhat.com>
+
+ fips: Mark AES key wrapping as approved.
+ + commit 20ad5df60b035e721de7cfc40cd76a1a13051072
+ * src/fips.c (_gcry_fips_indicator_cipher): Add key wrapping mode as
+ approved.
+
+ pkdf2: Add checks for FIPS.
+ + commit 057844700ec2e652249b0b80136229c049d41975
+ * cipher/kdf.c (_gcry_kdf_pkdf2): Require 8 chars passphrase for FIPS.
+ Set bounds for salt length and iteration count in FIPS mode.
+
+2022-11-01 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Prefer gpgrt-config when available.
+ + commit 5191379da3ad653fcf08ab1babb486ca952d1643
+ * src/libgcrypt.m4: Overriding the decision by
+ --with-libgcrypt-prefix, use gpgrt-config libgcrypt when gpgrt-config
+ is available.
+
+2022-10-27 Jakub Jelen <jjelen@redhat.com>
+
+ hmac,hkdf: Check the HMAC key length in FIPS mode.
+ + commit e7b1fbda6a9e0b6bf99062fc86139445a4e0766e
+ * src/visibility.c (gcry_md_setkey): Add the check here, too.
+
+ Revert "kdf:pkdf2: Require longer input when FIPS mode."
+ + commit 7f4fafb5564dec6fe65f0e93a1125cb6ddb4d1ed
+ * cipher/kdf.c (_gcry_kdf_pkdf2): Remove the length limitation of
+ passphrase input length.
+
+2022-10-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update gpg-error.m4.
+ + commit e2c0920fd7dea6e254badd12958982c66080b7db
+ * m4/gpg-error.m4: Update from libgpg-error 1.46.
+
+2022-10-06 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Reproducer for short dklen in FIPS mode.
+ + commit e235f38f9b9fc3cd4464bbf9081da765d46ce87d
+ * tests/t-kdf.c (check_pbkdf2): Add test vector with short dklen and
+ verify it fails in FIPS mode
+
+ random: Extend the comment about FIPS specifics.
+ + commit 96615490c7b1d5f77de7f7f2b77e775540f7f6bf
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): Clarify
+ description of the chainging DRBG in FIPS mode.
+
+2022-10-04 Jakub Jelen <jjelen@redhat.com>
+
+ random: Get maximum 32B of entropy at once in FIPS Mode.
+ + commit ce0df08bbab741cd2ad19a5a0e8b65fb62774f87
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): In fips
+ mode, gather max 32 B of strong entropy for initialization.
+
+ keccak: Use size_t to avoid integer overflow.
+ + commit 9ee2d56e806b8018fa3ae354a65f1e70bf73dede
+ * cipher/keccak-armv7-neon.S: Fix function name in comment and change
+ parameter type to size_t.
+ * cipher/keccak.c (keccak_ops_t): Change absorb function signature to
+ use size_t.
+ (keccak_absorb_lanes64_avx512): Change nlanes type to size_t.
+ (_gcry_keccak_absorb_lanes64_armv7_neon): Ditto.
+ (keccak_absorb_lanes64_armv7_neon): Ditto.
+ (keccak_absorb_lanes32bi): Ditto.
+ (keccak_absorb_lanes32bi_bmi2): Ditto.
+ (keccak_write): Change nlanes variable to use size_t and avoid
+ overflow when calculating count.
+ * cipher/keccak_permute_64.h (KECCAK_F1600_ABSORB_FUNC_NAME): Change
+ nlanes argument to use size_t.
+
+2022-10-04 Tobias Heider <tobias.heider@canonical.com>
+
+ kdf:pkdf2: Check minimum allowed key size when running in FIPS mode.
+ + commit 52d48b710470dd48dd2a32a439898ece10ef05fd
+ * cipher/kdf.c (_gcry_kdf_pkdf2): Add output length check.
+
+2022-10-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ kdf:pkdf2: Require longer input when FIPS mode.
+ + commit d09d3d33c79daa2f8d385dfedf3f20ad205b0fba
+ * cipher/kdf.c (_gcry_kdf_pkdf2): Add length check.
+
+2022-09-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix configure script.
+ + commit 44812a1d96fc003e6e0d01270c514b91e295d300
+ * configure.ac (AC_USE_SYSTEM_EXTENSIONS): Use it earlier.
+
+2022-09-22 Clemens Lang <cllang@redhat.com>
+
+ fips: Skip PCT if RSA keygen test-parms specified.
+ + commit 4963c127ae698d98f30483ba9d15d093aae4e51d
+ * cipher/rsa.c (rsa_generate): Skip PCT is test-parms were specified.
+ * tests/t-rsa-testparm.c: Add test for this functionality
+ * tests/Makefile.am: Add test to build system
+
+ build: Skip PK-specific tests if algo is disabled.
+ + commit 1524b60a7ccc17fb82e91b90236a88a27b113175
+ * configure.ac: Define AM_CONDITIONALs for USE_DSA, USE_RSA,
+ USE_ELGAMAL, USE_ECC so Makefiles can depend on them.
+ * tests/Makefile.am: Skip tests that test only one public key algorithm
+ if that algorithm is disabled.
+
+2022-09-20 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix _gcry_err_code_to_errno.
+ + commit 16ac1850b854abe9b6f693a489ceeb0048777bfa
+ * src/gcrypt-int.h: Use gpg_err_code_to_errno.
+
+2022-08-30 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Expect the OEAP tests to fail in FIPS mode.
+ + commit 658679e0ec8be9693a3deb6b85c2b39cb112218c
+ * tests/basic.c (check_pubkey_crypt): Expect the OAEP padding encryption
+ to fail in FIPS mode
+ * tests/pkcs1v2.c (check_oaep): Expect the OAEP tests to fail in FIPS
+ mode
+
+ fips: Disable RSA-OAEP padding in FIPS mode.
+ + commit e5bfda492ab9496ed3d856a9f36250a2cc07ce70
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Block OAEP padding
+ in FIPS mode for encryption
+ * cipher/rsa.c (rsa_decrypt): Block OAEP padding in FIPS mode for
+ decryption
+
+ random: Use getrandom (GRND_RANDOM) in FIPS mode.
+ + commit cf10c74bd9d5aa80798f1c0e23a9126f381b26b3
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): Use
+ GRND_RANDOM in FIPS Mode
+
+ Simplify the PCT for RSA and ECDSA.
+ + commit 285bf54b1ac7b5609a675655fe2cb9117ab78d3d
+ Could be squashed.
+
+ * cipher/ecc.c (test_keys_fips): Simplify to accept key in SEXP format
+ (nist_generate_key): Skip call to test keys
+ (ecc_generate): Call test keys in FIPS mode later, when we have
+ complete SEXP key structure.
+ * cipher/rsa.c (test_keys_fips): Simplify to accept key in SEXP format
+ (generate_fips): Skip selftest at this stage
+ (rsa_generate): Test the keys later when we already have key in SEXP
+ format
+
+ ecc: Run PCT also with the digest step.
+ + commit 076a8adaf314d593ca25c245d2a74207710a4fe7
+ * cipher/ecc.c (test_keys_fips): New function
+ (nist_generate_key): In FIPS mode, execute new PCT test
+ ---
+
+ Cherry-picked from master commit:
+ 505f048cac8e5af92d3431bd97ade492d1a30bc2
+
+ rsa: Run PCT in FIPS mode also with digest step.
+ + commit 78151e6d6bbbbf1248b7c32cbab0b9b638ad6c11
+ * cipher/rsa.c (test_keys_fips): New.
+ (generate_fips): Call test_keys_fips.
+
+ fips: Add function-name based FIPS indicator.
+ + commit 822ee57f07cad6b32fac265a1a9e195d7cf99fa9
+ * doc/gcrypt.texi: Document the new function-based fips indicator
+ GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION
+ * src/fips.c (_gcry_fips_indicator_function): New function indicating
+ non-approved functions.
+ * src/gcrypt.h.in (enum gcry_ctl_cmds): New symbol
+ GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION
+ * src/global.c (_gcry_vcontrol): Handle new FIPS indicator.
+
+ fips: Run digest&sign self tests for RSA and ECC in FIPS mode.
+ + commit 06c9350165d7284cd9fe569fd23e6c6cf371dba2
+ * cipher/ecc.c (selftest_hash_sign): Implement digest & sign KAT
+ (selftests_ecdsa): Run the original basic test only with extended tests
+ (run_selftests): Pass-through the extended argument
+ * cipher/rsa.c (selftest_hash_sign_2048): Implement digest & sign KAT
+ (selftests_rsa): Run the original basic test only with extended tests
+ (run_selftests): Pass-through the extended argument
+
+2022-08-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ hmac: Allow use of shorter salt.
+ + commit ab5aef9b7b6ef757eff7bea4a17ade0ce3d3191b
+ * cipher/md.c (prepare_macpads): Move the check to...
+ * src/visibility.c (gcry_mac_setkey): ... here.
+
+2022-07-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Fix gcry_pk_hash_verify for explicit hash.
+ + commit 1d3a90a4d118eafa6b2f777c998e85327a77fb3c
+ * cipher/pubkey.c (_gcry_pk_verify_md): Implement support of explicit
+ hash.
+ * tests/t-ecdsa.c (one_test_sexp): Use explicit hash.
+
+2022-07-13 Clemens Lang <cllang@redhat.com>
+
+ tests/t-kdf: Test KDF FIPS indicator.
+ + commit 3bbcf16e0b8b63d70893f6d9cc0fe77f7d8bc17b
+ * tests/t-kdf.c (check_fips_indicators): Add test for gcry_control
+ (GCRYCTL_FIPS_SERVICE_INDICATOR_KDF).
+
+ tests: Test gcry_pk_hash_sign w/explicit hash algo.
+ + commit 04960f5179cd9732931b9f245a902a8a34bde964
+ * tests/t-ecdsa.c (one_test_sexp): Re-run signature operation with hash
+ algorithm explicitly specified in data_tmpl as documented in the
+ manpage.
+
+2022-07-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Fix rndjent for Windows.
+ + commit bc01c770c75703992fc0585d76d84107bdcd9fea
+ * random/jitterentropy-base-user.h [HAVE_W32_SYSTEM] (jent_ncpu):
+ Implement.
+ * random/rndjent.c (_WIN32_WINNT): Define for GetNativeSystemInfo.
+ (EOPNOTSUPP): Define when not available.
+
+2022-06-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Allow building with --disable-asm for HPPA.
+ + commit d1cb2599e9d746bb3a088c63b24f8191072e11ef
+ * mpi/longlong.h [__hppa] (udiv_qrnnd): Only define
+ when assembler is enabled.
+
+2022-05-31 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Fix copy paste error.
+ + commit 4b85bf33cce7ee331d4da1b99620aed6f9fbf846
+ * tests/basic.c (check_ocb_cipher_checksum): Check the right value for
+ errors
+
+ Fix memory leaks in tests.
+ + commit 735601494adb22a6ec8b1a4eacf1f75480a7c203
+ * tests/aeswrap.c (check_one_with_padding): Free hd on error paths
+ * tests/basic.c (check_ccm_cipher): Free context on error paths
+ (check_ocb_cipher_checksum): Ditto.
+ (do_check_xts_cipher): Ditto.
+ (check_gost28147_cipher_basic): Ditto.
+ * tests/bench-slope.c (bench_ecc_init): Free memory on invalid input.
+ * tests/t-cv25519.c (test_it): Free memory on error path
+ * tests/t-dsa.c (hex2buffer): Free memory on error path
+ * tests/t-ecdsa.c (hex2buffer): Free memory on error path
+ (one_test_sexp): Cleanup memory on exit
+ * tests/t-mpi-point.c (check_ec_mul): Free memory on error
+ (check_ec_mul_reduction): Ditto
+ * tests/t-rsa-15.c (hex2buffer): Ditto
+ * tests/t-rsa-pss.c (hex2buffer): Ditto
+ * tests/t-x448.c (test_it): Free memory on error path
+ * tests/testdrv.c (my_spawn): Free memory on error paths
+
+2022-05-19 Jakub Jelen <jjelen@redhat.com>
+
+ cipher: Allow verification of small RSA signatures in FIPS mode.
+ + commit 468ffa8f9c471c910280e0d0ade521d0184ed533
+ * cipher/rsa.c (rsa_check_keysize): Formatting.
+ (rsa_check_verify_keysize): New function.
+ (rsa_verify): Allow using smaller keys for verification.
+
+2022-05-17 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix internal declaration of _gcry_kdf_compute.
+ + commit 6d3708942f846e389bd87fe3d7c6e7a1b3615bca
+ * src/gcrypt-int.h (_gcry_kdf_compute): Return gcry_err_code_t.
+
+2022-05-10 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Fix for 64-bit for _gcry_mpih_cmp_ui.
+ + commit 03af3d5cc5d54b6f810264568d6de22cd9e7d34f
+ * mpi/mpih-const-time.c (_gcry_mpih_cmp_ui): Compare 64-bit
+ value correctly.
+
+2022-05-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ random:drbg: Fix the behavior for child process.
+ + commit 019a40c99011390f12168e79e3bebd0ff52cc003
+ * random/random-drbg.c (_gcry_rngdrbg_randomize): Update change of PID
+ detection.
+
+2022-05-06 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Expect the RSA PKCS #1.5 encryption to fail in FIPS mode.
+ + commit 1a270cda2ee5fe345f480b4eda13b92a7b7f556e
+ * tests/basic.c (check_pubkey_crypt): Expect RSA PKCS #1.5 encryption to
+ fail in FIPS mode. Expect failure when wrong padding is selected
+ * tests/pkcs1v2.c (check_v15crypt): Expect RSA PKCS #1.5 encryption to
+ fail in FIPS mode
+
+ tests: Replace custom bit with more generic flags.
+ + commit 9c55ba3bc1ce72307886f6d88f37d908e3fad39a
+ * tests/basic.c (global): New flag FLAG_SPECIAL
+ (check_pubkey_crypt): Change to use bitfield flags
+
+ Do not allow PKCS #1.5 padding for encryption in FIPS.
+ + commit d8a13d97ccb62c8f7564192f0c8dcdc0b4d9745a
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Block PKCS #1.5
+ padding for encryption in FIPS mode
+ * cipher/rsa.c (rsa_decrypt): Block PKCS #1.5 decryption in FIPS mode
+
+2022-05-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Not use secure memory for DRBG instance.
+ + commit 9452640125d239937dfb9cde49be7c0dde2f65ee
+ * random/random-drbg.c (drbg_instance): New at BSS.
+ (_drbg_init_internal): Don't allocate at secure memory.
+ (_gcry_rngdrbg_close_fds): Follow the change.
+
+ cipher: Change the bounds for RSA key generation round.
+ + commit f6a67c2215310e9463267e15569697d3103b27f7
+ * cipher/rsa.c (generate_fips): Use 10 for p, 20 for q.
+
+2022-04-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Fix rsa key generation.
+ + commit 26df4b8d8c938fd837b99355de5163b9364d49a5
+ * cipher/rsa.c (generate_fips): Set the least significant bit.
+
+2022-04-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ hwf-ppc: fix missing HWF_PPC_ARCH_3_10 in HW feature.
+ + commit e073f0ed446601bffe787912462119a98e797fa3
+ * src/hwf-ppc.c (ppc_features): Add HWF_PPC_ARCH_3_10.
+
+2022-03-29 NIIBE Yutaka <gniibe@fsij.org>
+
+ kdf:argon2: Fix for the case output > 64.
+ + commit 13b5454d2620701863f6e89221f5f4c98d2aba8e
+ * cipher/blake2.c (blake2b_vl_hash): Fix the last step.
+ * cipher/kdf.c (argon2_open): Check the value.
+
+2022-03-28 Werner Koch <wk@gnupg.org>
+
+ Release 1.10.1.
+ + commit ae0e567820c37f9640440b3cff77d7c185aa6742
+
+
+ hash: Add more OIDs.
+ + commit 52fd2305ba8a0c53214016c11fdf03d47761ee8e
+ * cipher/sha256.c: Add X9.62 OID.
+ * cipher/sha512.c: Ditto.
+
+ tests: Add brainpoolP256r1 to bench-slope.
+ + commit eeddd578120c6c28cf600016aae124223ef99e8b
+ * tests/bench-slope.c (ECC_ALGO_BRAINP256R1): New.
+ (ecc_algo_fips_allowed): Support this curve.
+ (ecc_algo_name): Ditto.
+ (ecc_algo_curve): Ditto.
+ (ecc_nbits): Ditto.
+ (bench_ecc_init): Ditto.
+
+2022-02-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Clarify what to be hashed for the integrity check.
+ + commit 9fa4c8946ac5e79c37941c6264ac3d6314d9a3c0
+ * src/fips.c (get_file_offset): Compute the maximum offset
+ of segments.
+ * src/gen-note-integrity.sh: Likewise.
+
+ fips: Fix gen-note-integrity.sh script not to use cmp utility.
+ + commit ad8b67f9e21982c841f31e92d2639f726f7ea4be
+ * src/gen-note-integrity.sh: Simplify detecting 32-bit machine
+ or 64-bit machine.
+
+ fips: More portable integrity check.
+ + commit dcc6979fd2ed32bb5a5e448e2c9da1158c1d93c2
+ * src/Makefile.am (EXTRA_DIST): Change the name of the script.
+ (libgcrypt.la.done): Invoce OBJCOPY with --add-section.
+ (libgcrypt.so.hmac): Specify ECHO_N.
+ * src/fips.c (get_file_offset): Rename from get_file_offsets.
+ Find the note section and return the value in HMAC.
+ (hmac256_check): Simplify by HMAC from the note section, not loaded.
+ (check_binary_integrity): Use dladdr instead of dladdr1.
+ * src/gen-note-integrity.sh: Rename from genhmac.sh.
+ Generate ElfN_Nhdr, and then the hmac.
+
+ fips: Integrity check improvement, with only loadable segments.
+ + commit 974f4c7e698b0c1ffe3de82bad9b3f8813d1f42b
+ * configure.ac (READELF): Check the tool.
+ * src/Makefile.am (libgcrypt.so.hmac): Use genhmac.sh with hmac256.
+ * src/fips.c (get_file_offsets): Rename from get_file_offset.
+ Determine the OFFSET2 at the end of loadable segments, too.
+ Add fixup of the ELF header to exclude section information.
+ (hmac256_check): Finish scanning at the end of loadble segments.
+ * src/genhmac.sh: New.
+
+2022-02-22 Clemens Lang <cllang@redhat.com>
+
+ fips: Use ELF header to find hmac file offset.
+ + commit 4ed49a917212507de8679aaf08504922a95cf6ef
+ * src/fips.c [ENABLE_HMAC_BINARY_CHECK] (hmac256_check): Use ELF headers
+ to locate the file offset for the HMAC in addition to information from
+ the loader
+
+2022-02-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ Silence compiler warnings for possible alignment problem.
+ + commit 64fef214025949a1b0a76355b99c85594caea4ca
+ * cipher/kdf.c (_gcry_kdf_compute, _gcry_kdf_final, _gcry_kdf_close):
+ Fix the cast.
+
+2022-02-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix m4/gpg-error.m4.
+ + commit b5b7b8c5c76838350f1857a40c428c9092f9da8e
+ * m4/gpg-error.m4: Unset GPGRT_CONFIG when it doesn't work well.
+
+2022-02-14 Clemens Lang via Gcrypt-devel <gcrypt-devel@lists.gnupg.org>
+
+ hmac: Fix memory leak.
+ + commit 2bdc6614c866b0197f534e5cf3ec35d9f024facd
+ * src/hmac.c: Release HMAC256 context
+
+ fips: Fix memory leaks in FIPS mode.
+ + commit a60f8e43dd1b02adf7d1fd54c2e1d27564dd12c1
+ * cipher/pubkey.c (_gcry_pk_sign_md): Fix memory leak in FIPS mode when
+ used with SHA1
+ * tests/basic.c (check_one_cipher_core): Add missing free in error code
+ triggered in FIPS mode
+ * tests/dsa-rfc6979.c (check_dsa_rfc6979): Likewise
+ * tests/pubkey.c (check_x931_derived_key): Likewise
+
+2022-02-14 NIIBE Yutaka <gniibe@fsij.org>
+
+ kdf: Use u64.
+ + commit 6683007d696dfe64640dc741c4332784ec246388
+ * cipher/kdf.c (rotr64): We use u64 in libgcrypt.
+
+2022-02-04 Heiko Becker <heirecka@exherbo.org>
+
+ jitterentropy: Include <fcntl.h> and <limits.h>
+ + commit ffaef0be613121d3ee37867d82932a7a30c2bc6d
+ * random/jitterentropy-base-user.h: Include <fcntl.h> for O_RDONLY
+ * random/jitterentropy-base-user.h: Include <limits.h> for LONG_MAX
+
+2022-02-01 Werner Koch <wk@gnupg.org>
+
+ Release 1.10.0.
+ + commit e4ab2147f3e236f7be95f9709ce09193b2ca5c1a
+
+
+2022-01-31 Werner Koch <wk@gnupg.org>
+
+ rsa: Fix regression in not returning an error for prime generation.
+ + commit 217bf0a0e7be4a216a405a4bfb719e0fd437c2a3
+ * cipher/rsa.c (generate_fips): Set the default EC again.
+
+2022-01-31 Jakub Jelen <jjelen@redhat.com>
+
+ cipher: Initialize values not to confuse static analyzers.
+ + commit cb9df21fcbb05d9650df7b45671d335eefad405b
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_sign): Initialize integer values
+ not to confuse static analyzers.
+ (_gcry_ecc_eddsa_verify): Ditto.
+
+ fips: Remove unused assignment.
+ + commit d2003618e6bf733f0c913f5c8961779f8e4dc05c
+ * src/fips.c (hmac256_check): Remove unused assignment.
+
+ cipher: Remove dead code in for the siv mode.
+ + commit 0f38e6a877f19db303672ca899b36333fb84c8fa
+ * cipher/cipher-siv.c (_gcry_cipher_siv_setkey): Remove dead code
+
+ random: Avoid dereference of the ec before checking for NULL.
+ + commit 904e168bdb2ac4cbfe32db86a6cd11ab462340ad
+ * random/jitterentropy-noise.c (jent_memaccess): Move check before
+ dereferencing the pointer.
+
+2022-01-31 NIIBE Yutaka <gniibe@fsij.org>
+
+ kdf: Fix computation by big-endian machine.
+ + commit 77512c510bf744b341d3173e65e22b9dd0b5df03
+ * cipher/kdf.c (beswap64_block): New.
+ (argon2_fill_first_blocks): Convert to native endian.
+ (pseudo_random_generate): Run in native endian.
+ (argon2_compute_segment): Run in native endian.
+ (argon2_final): Convert from native endian.
+
+ ciper/blake2: Make sure to clean up the stack.
+ + commit 7dc488ae036addd69878681a4eab6d25e9d99c8e
+ * cipher/blake2.c (blake2b_vl_hash): Wipe the memory.
+
+2022-01-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ kdf: handle errors from thread dispatch/wait functions.
+ + commit 54369c66bedd20d6846ed8fab678082ec8eecf5d
+ * cipher/kdf.c (argon2_compute): Handle failed job dispatch/wait.
+ * tests/t-kdf.c (pthread_jobs_launch_job)
+ (wait_all_jobs_completion): Handle errors returned from pthread functions.
+
+ kdf/argon2: use BLAKE2b hash_buffers function instead of _gcry_md_*
+ + commit 409f69167983deacee6d6c85c80a4be0e4b5d7c1
+ * cipher/kdf.c (argon2_fill_first_blocks): Convert to use iov
+ hash_buffers API instead of _gcry_md_*.
+
+ Rename KDF job functions and function types.
+ + commit c5aead8aebc7dfb699597eb6adf334bd2edbc374
+ * src/gcrypt.h.in (gcry_kdf_job_fn_t): New.
+ (gcry_kdf_dispatch_job_fn_t): Renamed from 'gcry_kdf_lauch_job_t'; Use
+ 'gcry_kdf_job_fn_t' for function pointer parameter.
+ (gcry_kdf_wait_all_jobs_fn_t): Renamed from
+ 'gcry_kdf_wait_all_jobs_completion_t'.
+ (gcry_kdf_thread_ops_t): Rename functions to 'dispatch_job' and
+ 'wait_all_jobs'.
+ * cipher/kdf.c (argon2_compute): Change to use 'dispatch_job' and
+ 'wait_all_jobs'.
+ * tests/t-kdf.c (job_thread_param, pthread_jobs_launch_job): Use
+ 'gcry_kdf_job_fn_t' type for 'job'.
+
+ tests/t-kdf: few changes to pthread example and fix win32/win64 builds.
+ + commit 03a0eedefe3e8b979aee6fb9800fe8e794f50089
+ * src/gcrypt.h.in (gcry_kdf_thread_ops_t): New based on
+ 'struct gcry_kdf_thread_ops'.
+ (gcry_kdf_compute): Use 'gcry_kdf_thread_ops_t' instead of
+ 'struct gcry_kdf_thread_ops'.
+ * tests/Makefile.am: Define 't_kdf_LDADD' and 't_kdf_CFLAGS' on
+ win32/win64 target too.
+ * tests/t-kdf.c (pthread_jobs_launch_job): Set 'oldest_thread_idx' on
+ first thread creation.
+ (wait_all_jobs_completion): Reset 'oldest_thread_idx' to -1.
+ (my_kdf_derive): Merge HAVE_PTHREAD ifdefs; Initialize 'oldest_thread_idx'
+ to -1.
+
+2022-01-28 NIIBE Yutaka <gniibe@fsij.org>
+ Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ kdf: Change new KDF API.
+ + commit 254fb14044cfce87b619138dec7bb78a2534d1b3
+ * cipher/kdf.c (argon2_ctl): Remove.
+ (argon2_iterator): Remove.
+ (argon2_compute_segment): Change the API.
+ (argon2_compute): New.
+ (argon2_open): No optional N_THERADS any more.
+ (_gcry_kdf_ctl): Remove.
+ (_gcry_kdf_iterator, _gcry_kdf_compute_segment): Remove.
+ (_gcry_kdf_compute): New.
+ * src/gcrypt-int.h: Update declarations.
+ * src/gcrypt.h.in: Likewise.
+ * src/libgcrypt.def: Update.
+ * src/libgcrypt.vers: Update.
+ * src/visibility.c: Update.
+ * src/visibility.h: Update.
+ * tests/t-kdf.c (check_argon2): Update the test with change of new
+ API.
+
+2022-01-28 NIIBE Yutaka <gniibe@fsij.org>
+
+ kdf: Implement Argon2 KDF using blake2b_vl_hash function.
+ + commit 4cbbd87e2af00c7b3f0236a56f12bd51e9295816
+ * cipher/kdf.c (hash): Remove, as it's not possible to implement with
+ _gcry_md_* programming interface.
+ (xor_block): New.
+ (argon2_fill_first_blocks): Rename from argon2_genh0_first_blocks.
+ (argon2_init): Don't use ->HD any more.
+ (fill_block, pseudo_random_generate, index_alpha): New.
+ (argon2_compute_segment): Implement ARGOND, ARGON2I and ARGON2ID.
+ (argon2_final): Fix using blake2b_vl_hash.
+ (argon2_open): Fix for parameters and the restriction for output length.
+ * tests/t-kdf.c (check_argon2): Update test vector for version 0x13.
+ (main): Enable the test.
+
+ cipher: Implement variable-length hash function for Argon2.
+ + commit 6467287ba121df9e5965d5a3a7a4f349793d49d2
+ * cipher/blake2.c (blake2b_vl_hash): New.
+
+2022-01-26 NIIBE Yutaka <gniibe@fsij.org>
+
+ kdf: Improve new KDF API.
+ + commit 5d1da2c61981243729365724f14e3d4abacb0e6a
+ * cipher/kdf.c (struct argon2_thread_data): Change layout.
+ (argon2_iterator): Use struct gcry_kdf_pt_head.
+ (argon2_compute_segment): Rename from argon2_compute_row.
+ (argon2_open): Handle N_THREAD maximum.
+ (_gcry_kdf_iterator): Use struct gcry_kdf_pt_head.
+ (_gcry_kdf_compute_segment): Rename from _gcry_kdf_compute_row.
+ * src/gcrypt-int.h: Update declarations.
+ * src/gcrypt.h.in (struct gcry_kdf_pt_head): Expose the data type.
+ * src/libgcrypt.def, src/libgcrypt.vers: Update.
+ * src/visibility.c, src/visibility.h: Update.
+ * tests/t-kdf.c (start_thread, my_kdf_derive): Follow the change.
+
+ kdf: Improve new KDF API.
+ + commit f21871e241e96148cef3ad4314ad596178cf8967
+ * cipher/kdf.c (struct argon2_thread_data): Change layout.
+ (argon2_iterator): Use struct gcry_kdf_pt_head.
+ (argon2_compute_segment): Rename from argon2_compute_row.
+ (argon2_open): Handle N_THREAD maximum.
+ (_gcry_kdf_iterator): Use struct gcry_kdf_pt_head.
+ (_gcry_kdf_compute_segment): Rename from _gcry_kdf_compute_row.
+ * src/gcrypt-int.h: Update declarations.
+ * src/gcrypt.h.in (struct gcry_kdf_pt_head): Expose the data type.
+ * src/libgcrypt.def, src/libgcrypt.vers: Update.
+ * src/visibility.c, src/visibility.h: Update.
+ * tests/t-kdf.c (start_thread, my_kdf_derive): Follow the change.
+
+2022-01-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Include sys/random.h when available.
+ + commit 5e2d792eb8d9e5aaf1b71205f9298286b8145462
+ * configure.ac (AC_CHECK_HEADERS): Check sys/random.h.
+ * random/rndgetentropy.c [HAVE_SYS_RANDOM_H]: Include it.
+
+ cipher: Add new API for modern KDF function.
+ + commit bafdb90d97b65db541ea917088ca956e6a364f6b
+ * cipher/kdf.c (hash, argon2_genh0_first_blocks): New for Argon2.
+ (argon2_init, argon2_ctl, argon2_iterator): Likewise.
+ (argon2_compute_row, argon2_final, argon2_close): Likewise.
+ (argon2_open): Likewise.
+ (balloon_open): New for Balloon.
+ (_gcry_kdf_open, _gcry_kdf_ctl, _gcry_kdf_iterator): Add new API.
+ (_gcry_kdf_compute_row, _gcry_kdf_final, _gcry_kdf_close): Likewise.
+ * src/gcrypt-int.h: Add declarations for new API.
+ * src/gcrypt.h.in: Likewise.
+ (enum gcry_kdf_algos): Add GCRY_KDF_ARGON2 and GCRY_KDF_BALLOON.
+ (enum gcry_kdf_subalgo_argon2): Add GCRY_KDF_ARGON2D,
+ GCRY_KDF_ARGON2I, and GCRY_KDF_ARGON2ID.
+ * src/libgcrypt.def, src/libgcrypt.vers: Update.
+ * src/visibility.h: Likewise.
+ * src/visibility.c: Add new API.
+ * tests/Makefile.am (t_kdf_LDADD, t_kdf_CFLAGS): Enable use of pthread.
+ * tests/t-kdf.c (check_argon2): New, not enabled yet.
+
+ Prefer uint64_t for the definition of u64.
+ + commit 3d353782d84b9720262d7b05adfae3aef7ff843b
+ * src/types.h (u64): Prefer use of uint64_t with C99 compliant
+ compiler.
+
+ tests: Fix variable initialization for tests.
+ + commit 99642f18ccbe45fb4cae55945af49f7884bcaceb
+ * tests/t-rsa-15.c (one_test_sexp): Initialize OUT_LEN.
+ * tests/t-rsa-pss.c (one_test_sexp): Initialize CTX and OUT_LEN.
+ Fix the if condition.
+
+2022-01-25 Jakub Jelen <jjelen@redhat.com>
+
+ mpi: Add missing header file to the tarball.
+ + commit 08f3e0909f8c4fefc2c020dca206037693282186
+ * mpi/Makefile.am: Add missing header file.
+
+ doc: Update more information about FIPS selftests and algorithms.
+ + commit 1f299cb16afdfd0ccc3cd9e9ae65a789be6514f7
+ * doc/gcrypt.texi: List implemented GOST curves.
+ Update location of the HMAC selftests and add SHA3 ones.
+ Add information about ECC selftests.
+ Add information about KDF selftests.
+ Update information about additional MAC selftests.
+ Update ifnromation about FIPS allowed algorithms.
+
+2022-01-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/t-kdf: fix format string argument type mismatch.
+ + commit e9e723d5e320ff2c67bf9a9841777749a44e54d0
+ * tests/t-kdf.c (check_pbkdf2, check_scrypt): Change fprintf format
+ for plen from "%ld" to "%u" and cast plen to 'unsigned int'.
+
+ Fix building GCM when GCM_USE_ARM_NEON defined but GCM_USE_ARM_PMULL not
+ + commit a35ac62ee7b5a6e799eb4a89a934da0313fb1158
+ * cipher/cipher-gcm.c (setupM): Remove ifdef around 'features'.
+
+2022-01-20 NIIBE Yutaka <gniibe@fsij.org>
+
+ scrypt: Fix the last step of SCRYPT.
+ + commit 867435cf8847fb80e922eb818fbcfac131863b8c
+ * cipher/scrypt.c (_gcry_kdf_scrypt): Single call to PBKDF2.
+
+ fips: Recover test cases for selftest, add skipping in FIPS mode.
+ + commit 535a4d345872aa2cd2ab3a5f9c4411d0a0313328
+ * cipher/kdf.c (check_one): Skip a test with shorter passphrase in
+ FIPS mode.
+ (selftest_pbkdf2): Recover selftest cases.
+ * cipher/mac-hmac.c (check_one): Skip a test with shorter key in FIPS
+ mode.
+ (selftests_sha224, selftests_sha256): Recover selftest cases.
+ (selftests_sha384, selftests_sha512, selftests_sha3): Likewise.
+
+2022-01-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Reject shorter key for HMAC in FIPS mode.
+ + commit 76aad97dd312e83f2f9b8d086553f2b72ab6546f
+ * cipher/md.c (prepare_macpads): Reject < 112-bit key.
+ * cipher/kdf.c (selftest_pbkdf2): Remove selftest cases with shorter
+ key.
+ * cipher/mac-hmac.c (selftests_sha224, selftests_sha256): Likewise.
+ (selftests_sha384, selftests_sha512, selftests_sha3): Likewise.
+ * tests/basic.c (check_one_hmac) Handle an error when shorter key
+ is rejected.
+ (check_one_mac): Likewise.
+ * tests/t-kdf.c (check_pbkdf2, check_scrypt): Likewise.
+
+2022-01-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix .m4 files in distribution.
+ + commit 6f225308d3e59f8749403ad743d8e6c591142f8f
+ * m4/Makefile.am (EXTRA_DIST): Remove sys_socket_h.m4.
+
+2022-01-17 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Remove GCRYCTL_FIPS_SERVICE_INDICATOR and renumber the enum.
+ + commit d0db6a5abf7b8cc5637de5a080a7ed986e3ff63f
+ * src/gcrypt.h.in (enum gcry_ctl_cmds): Remove
+ GCRYCTL_FIPS_SERVICE_INDICATOR.
+ * src/fips.c (_gcry_fips_indicator_cipher): Use gcry_kdf_algos.
+ * tests/basic.c: Use GCRYCTL_FIPS_SERVICE_INDICATOR_CIPHER.
+
+2022-01-17 Jakub Jelen <jjelen@redhat.com>
+
+ Update documentation related to FIPS.
+ + commit e023e10ee89baf5d5909de4d8c13ba6dfbc8ed99
+ * cipher/rsa.c (selftest_encr_2048): Fix error message
+ * doc/gcrypt.texi: Add missing hwfeatures
+ Add description of the service indicator API
+ Fix typo in tampered word
+ Add some missing curves
+ Remove algoriths no longer used in FIPS mode and update claims given
+
+ fips: Add support for KDF FIPS indicators.
+ + commit 8611c9f276ad0f51fcdd4da0481108880104338f
+ * src/fips.c (_gcry_fips_indicator): rename to
+ _gcry_fips_indicator_cipher().
+ (_gcry_fips_indicator_kdf): New function.
+ * src/g10lib.h: Rename _gcry_fips_indicator to
+ _gcry_fips_indicator_cipher() and add _gcry_fips_indicator_kdf()
+ * src/gcrypt.h.in (enum gcry_ctl_cmds): Add
+ GCRYCTL_FIPS_SERVICE_INDICATOR_CIPHER and
+ GCRYCTL_FIPS_SERVICE_INDICATOR_KDF.
+ * src/global.c (_gcry_vcontrol): Implement support for KDF FIPS
+ Indicator separate from the cipher one.
+
+2022-01-11 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-aesni: small optimization for cbc-enc and cfb-enc.
+ + commit dfd53c7eddf0beaf9e85daaed92c0bd756112470
+ * cipher/rijndael-aesni.c (_gcry_aes_aesni_cfb_enc)
+ (_gcry_aes_aesni_cbc_enc): Copy contents of 'do_aesni_enc' here and
+ merge input/output and first/last round key xoring to shorten critical
+ path.
+
+ mpi/amd64: remove extra 'ret' from assembly functions.
+ + commit 0c0f27a89205842b5ef8e56a9726074f6b738f73
+ * mpi/amd64/mpih-add1.S: Remove 'ret' as it is already included by
+ FUNC_EXIT macro.
+ * mpi/amd64/mpih-lshift.S: Likewise.
+ * mpi/amd64/mpih-mul1.S: Likewise.
+ * mpi/amd64/mpih-mul2.S: Likewise.
+ * mpi/amd64/mpih-mul3.S: Likewise.
+ * mpi/amd64/mpih-rshift.S: Likewise.
+ * mpi/amd64/mpih-sub1.S: Likewise.
+
+ mpi/config.links: merge i586 targets with rest i*86 targets.
+ + commit 9bbb6c2c5d03c19b7f4356628a76eb8bde3ab026
+ * mpi/config.links: Merge i586 targets with rest i[3467]86 targets.
+
+ mpi: remove unused i586 and pentium4 assembly.
+ + commit 2800de892585c405099039d6f9dc346c3a71c16e
+ * mpi/config.links: Remove 'i586' from paths.
+ * mpi/i586*: Remove.
+ * mpi/pentium4/*: Remove.
+
+ Add straight-line speculation hardening for aarch64 assembly.
+ + commit 34bcc102158a651781f4e7639e2654068a39db6d
+ * cipher/asm-common-aarch64.h (ret_spec_stop): New.
+ * cipher/asm-poly1305-aarch64.h: Use 'ret_spec_stop' for 'ret'
+ instruction.
+ * cipher/camellia-aarch64.S: Likewise.
+ * cipher/chacha20-aarch64.S: Likewise.
+ * cipher/cipher-gcm-armv8-aarch64-ce.S: Likewise.
+ * cipher/crc-armv8-aarch64-ce.S: Likewise.
+ * cipher/rijndael-aarch64.S: Likewise.
+ * cipher/rijndael-armv8-aarch64-ce.S: Likewise.
+ * cipher/sha1-armv8-aarch64-ce.S: Likewise.
+ * cipher/sha256-armv8-aarch64-ce.S: Likewise.
+ * cipher/sm3-aarch64.S: Likewise.
+ * cipher/twofish-aarch64.S: Likewise.
+ * mpi/aarch64/mpih-add1.S: Likewise.
+ * mpi/aarch64/mpih-mul1.S: Likewise.
+ * mpi/aarch64/mpih-mul2.S: Likewise.
+ * mpi/aarch64/mpih-mul3.S: Likewise.
+ * mpi/aarch64/mpih-sub1.S: Likewise.
+
+ Add straight-line speculation hardening for amd64 and i386 assembly.
+ + commit 11ade08efbfbc36dbf3571f1026946269950bc40
+ * cipher/asm-common-amd64.h (ret_spec_stop): New.
+ * cipher/arcfour-amd64.S: Use 'ret_spec_stop' for 'ret' instruction.
+ * cipher/blake2b-amd64-avx2.S: Likewise.
+ * cipher/blake2s-amd64-avx.S: Likewise.
+ * cipher/blowfish-amd64.S: Likewise.
+ * cipher/camellia-aesni-avx-amd64.S: Likewise.
+ * cipher/camellia-aesni-avx2-amd64.h: Likewise.
+ * cipher/cast5-amd64.S: Likewise.
+ * cipher/chacha20-amd64-avx2.S: Likewise.
+ * cipher/chacha20-amd64-ssse3.S: Likewise.
+ * cipher/des-amd64.S: Likewise.
+ * cipher/rijndael-aarch64.S: Likewise.
+ * cipher/rijndael-amd64.S: Likewise.
+ * cipher/rijndael-ssse3-amd64-asm.S: Likewise.
+ * cipher/rijndael-vaes-avx2-amd64.S: Likewise.
+ * cipher/salsa20-amd64.S: Likewise.
+ * cipher/serpent-avx2-amd64.S: Likewise.
+ * cipher/serpent-sse2-amd64.S: Likewise.
+ * cipher/sha1-avx-amd64.S: Likewise.
+ * cipher/sha1-avx-bmi2-amd64.S: Likewise.
+ * cipher/sha1-avx2-bmi2-amd64.S: Likewise.
+ * cipher/sha1-ssse3-amd64.S: Likewise.
+ * cipher/sha256-avx-amd64.S: Likewise.
+ * cipher/sha256-avx2-bmi2-amd64.S: Likewise.
+ * cipher/sha256-ssse3-amd64.S: Likewise.
+ * cipher/sha512-avx-amd64.S: Likewise.
+ * cipher/sha512-avx2-bmi2-amd64.S: Likewise.
+ * cipher/sha512-ssse3-amd64.S: Likewise.
+ * cipher/sm3-avx-bmi2-amd64.S: Likewise.
+ * cipher/sm4-aesni-avx-amd64.S: Likewise.
+ * cipher/sm4-aesni-avx2-amd64.S: Likewise.
+ * cipher/twofish-amd64.S: Likewise.
+ * cipher/twofish-avx2-amd64.S: Likewise.
+ * cipher/whirlpool-sse2-amd64.S: Likewise.
+ * mpi/amd64/func_abi.h (CFI_*): Remove, include from "asm-common-amd64.h"
+ instead.
+ (FUNC_EXIT): Use 'ret_spec_stop' for 'ret' instruction.
+ * mpi/asm-common-amd64.h: New.
+ * mpi/i386/mpih-add1.S: Use 'ret_spec_stop' for 'ret' instruction.
+ * mpi/i386/mpih-lshift.S: Likewise.
+ * mpi/i386/mpih-mul1.S: Likewise.
+ * mpi/i386/mpih-mul2.S: Likewise.
+ * mpi/i386/mpih-mul3.S: Likewise.
+ * mpi/i386/mpih-rshift.S: Likewise.
+ * mpi/i386/mpih-sub1.S: Likewise.
+ * mpi/i386/syntax.h (ret_spec_stop): New.
+
+ Optimizations for AES aarch64-ce assembly implementation.
+ + commit ff2a647d36677f6ad9edbe992a6c0ab0f7cf9510
+ * cipher/rijndael-armv8-aarch64-ce.S (vk14): Remove.
+ (vklast, __, _): New.
+ (aes_preload_keys): Setup vklast.
+ (do_aes_one128/192/256): Split to ...
+ (do_aes_one_part1, do_aes_part2_128/192/256): ... these and add
+ interleave ops.
+ (do_aes_one128/192/256): New using above part1 and part2 macros.
+ (aes_round_4): Rename to ...
+ (aes_round_4_multikey): ... this and allow different key used for
+ parallel blocks.
+ (aes_round_4): New using above multikey macro.
+ (aes_lastround_4): Reorder AES round and xor instructions, allow
+ different last key for parallel blocks.
+ (do_aes_4_128/192/256): Split to ...
+ (do_aes_4_part1_multikey, do_aes_4_part1)
+ (do_aes_4_part2_128/192/256): ... these.
+ (do_aes_4_128/192/256): New using above part1 and part2 macros.
+ (CLEAR_REG): Use movi for clearing registers.
+ (aes_clear_keys): Remove branching and clear all key registers.
+ (_gcry_aes_enc_armv8_ce, _gcry_aes_dec_armv8_ce): Adjust to macro
+ changes.
+ (_gcry_aes_cbc_enc_armv8_ce, _gcry_aes_cbc_dec_armv8_ce)
+ (_gcry_aes_cfb_enc_armv8_ce, _gcry_aes_cfb_enc_armv8_ce)
+ (_gcry_aes_ctr32le_enc_armv8_ce): Apply entry/loop-body/exit
+ optimization for better interleaving of input/output processing;
+ First/last round key and input/output xoring optimization to reduce
+ critical path length.
+ (_gcry_aes_ctr_enc_armv8_ce): Add fast path for counter incrementing
+ without byte-swaps when counter does not overflow 8-bit; Apply
+ entry/loop-body/exit optimization for better interleaving of
+ input/output processing; First/last round key and input/output
+ xoring optimization to reduce critical path length.
+ (_gcry_aes_ocb_enc_armv8_ce, _gcry_aes_ocb_dec_armv8_ce): Add aligned
+ processing for nblk and OCB offsets; Apply entry/loop-body/exit
+ optimization for better interleaving of input/output processing;
+ First/last round key and input/output xoring optimization to reduce
+ critical path length; Change to use same function body macro for
+ both encryption and decryption.
+ (_gcry_aes_xts_enc_armv8_ce, _gcry_aes_xts_dec_armv8_ce): Apply
+ entry/loop-body/exit optimization for better interleaving of
+ input/output processing; First/last round key and input/output
+ xoring optimization to reduce critical path length; Change to use
+ same function body macro for both encryption and decryption.
+
+ Add armv8/pmull accelerated POLYVAL for GCM-SIV.
+ + commit 4e6f1ef5a00e15128e5f2398e2c282d31152d276
+ * cipher/cipher-gcm-armv8-aarch32-ce.S
+ (_gcry_polyval_armv8_ce_pmull): New.
+ * cipher/cipher-gcm-armv8-aarch64-ce.S
+ (_gcry_polyval_armv8_ce_pmull): New.
+ * cipher/cipher-gcm.c (_gcry_polyval_armv8_ce_pmull)
+ (polyval_armv8_ce_pmull): New.
+ (setupM) [GCM_USE_ARM_PMULL]: Setup 'polyval_armv8_ce_pmull' as POLYVAL
+ function.
+
+ Use 'vmov' and 'movi' for vector register clearing in ARM assembly.
+ + commit 859b6ac7fbdb6ec18d1536e14b9ee83c1add224e
+ * cipher/chacha20-aarch64.S (clear): Use 'movi'.
+ * cipher/chacha20-armv7-neon.S (clear): Use 'vmov'.
+ * cipher/cipher-gcm-armv7-neon.S (clear): Use 'vmov'.
+ * cipher/cipher-gcm-armv8-aarch32-ce.S (CLEAR_REG): Use 'vmov'.
+ * cipher/cipher-gcm-armv8-aarch64-ce.S (CLEAR_REG): Use 'movi'.
+ * cipher/rijndael-armv8-aarch32-ce.S (CLEAR_REG): Use 'vmov'.
+ * cipher/sha1-armv7-neon.S (clear): Use 'vmov'.
+ * cipher/sha1-armv8-aarch32-ce.S (CLEAR_REG): Use 'vmov'.
+ * cipher/sha1-armv8-aarch64-ce.S (CLEAR_REG): Use 'movi'.
+ * cipher/sha256-armv8-aarch32-ce.S (CLEAR_REG): Use 'vmov'.
+ * cipher/sha256-armv8-aarch64-ce.S (CLEAR_REG): Use 'movi'.
+ * cipher/sha512-armv7-neon.S (CLEAR_REG): New using 'vmov'.
+ (_gcry_sha512_transform_armv7_neon): Use CLEAR_REG for clearing
+ registers.
+
+ Add SM3 ARM/AArch64 assembly implementation.
+ + commit f664333a4749eab03c6b19bae2f28863b8501a24
+ * cipher/Makefile.am: Add 'sm3-aarch64.S'.
+ * cipher/sm3-aarch64.S: New.
+ * cipher/sm3.c (USE_AARCH64_SIMD): New.
+ [USE_AARCH64_SIMD] (_gcry_sm3_transform_aarch64)
+ (do_sm3_transform_aarch64): New.
+ (sm3_init) [USE_AARCH64_SIMD]: New.
+ * configure.ac: Add 'sm3-aarch64.lo'.
+ * tests/basic.c (main): Add command-line option '--hash' for running
+ only hash algorithm tests.
+
+2022-01-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Rename rndlinux module to rndoldlinux.
+ + commit 560943805a525a6f479b666578b0ff7d51e6f833
+ * configure.ac (USE_RNDOLDLINUX): Rename from USE_RNDLINUX.
+ (GCRYPT_RANDOM): Use rndoldlinux.lo.
+ * doc/gcrypt.texi: Update.
+ * random/Makefile.am (EXTRA_librandom_la_SOURCES): Update.
+ * random/rndoldlinux.c: Rename from rndlinux.c. Rename the function.
+ * random/rand-internal.h: Update the function name.
+ * random/random-csprng.c: Update the calls to the function.
+ * random/random-drbg.c: Likewise.
+ * random/random-system.c: Likewise.
+ * src/global.c: Use USE_RNDOLDLINUX.
+
+2022-01-11 Jakub Jelen <jjelen@redhat.com>
+
+ configure: Fix help text for the fips module version.
+ + commit 83e58191d3d960b3efda960dd6fe50e8f0b02bda
+ * configure.ac: Fix unmatched parenthesis and add more verbose
+ description of the --with-fips-module-version configure option.
+
+2022-01-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Provide a mechanizm to put libgcrypt in non-FIPS mode.
+ + commit 2a8b3fed1a80e74dfb12c03e426373a300407eda
+ * doc/gcrypt.texi (Disabling FIPS mode): Add.
+ * src/gcrypt.h.in (GCRYCTL_NO_FIPS_MODE): New.
+ * src/global.c (_gcry_vcontrol): Support GCRYCTL_NO_FIPS_MODE.
+ * tests/t-ed25519.c: Add --no-fips option to test non-FIPS mode.
+
+ cipher: Keep original behavior of Key Unwrap when not extended.
+ + commit 383866f014f2ae8487d15e3fd99fe688b489d364
+ * cipher/cipher-aeswrap.c (_gcry_cipher_keywrap_decrypt_auto): Only
+ allow unwrapping by KWP when GCRY_CIPHER_EXTENDED is specified.
+
+2022-01-05 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Add an API to retrieve unwrapped key length for KWP.
+ + commit 746b8e29969be56e086191dbe93978f7e0355aa0
+ * cipher/cipher-aeswrap.c (_gcry_cipher_keywrap_decrypt)
+ (_gcry_cipher_keywrap_decrypt_padding): Merged into...
+ (_gcry_cipher_keywrap_decrypt_auto): ... this.
+ Write length information to struct gcry_cipher_handle.
+ * cipher/cipher-internal.h (struct gcry_cipher_handle): Add
+ u_mode.wrap.
+ * cipher/cipher.c (_gcry_cipher_setup_mode_ops): Use
+ _gcry_cipher_keywrap_decrypt_auto.
+ (_gcry_cipher_info): Support GCRYCTL_GET_KEYLEN for
+ GCRY_CIPHER_MODE_AESWRAP. Not that it's not length of KEK,
+ but length of unwrapped key.
+ * tests/aeswrap.c (check_one_with_padding): Add check
+ for length of unwrapped key.
+
+2022-01-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Use const for *_spec_t, if possible.
+ + commit f9ba07942b10c72af50bd73c92c4851b6981546e
+ * cipher/blake2.c: Use const.
+ * cipher/camellia-glue.c, cipher/cipher.c, cipher/crc.c: Likewise.
+ * cipher/des.c, cipher/gost28147.c, cipher/gostr3411-94.c: Likewise.
+ * cipher/keccak.c, cipher/mac-cmac.c, cipher/mac-gmac.c: Likewise.
+ * cipher/mac-hmac.c, cipher/mac-internal.h: Likewise.
+ * cipher/mac-poly1305.c, cipher/mac.c, cipher/md.c: Likewise.
+ * cipher/md.c, cipher/md2.c, cipher/md4.c, cipher/md5.c: Likewise.
+ * cipher/pubkey.c, cipher/rfc2268.c, cipher/rijndael.c: Likewise.
+ * cipher/rmd160.c, cipher/seed.c, cipher/serpent.c: Likewise.
+ * cipher/sha1.c, cipher/sha256.c, cipher/sha512.c: Likewise.
+ * cipher/sm3.c, cipher/sm4.c, cipher/stribog.c: Likewise.
+ * cipher/pubkey.c, cipher/rfc2268.c, cipher/rijndael.c: Likewise.
+ * src/cipher-proto.h, src/cipher.h: Likewise.
+
+ fips: Use flags.fips to check algo availability.
+ + commit 034e4402dade7a4bcc239913b78c702c5c6f0dbb
+ * cipher/cipher.c (check_cipher_algo): Check ->flags.fips.
+ (_gcry_cipher_open_internal, _gcry_cipher_selftest): Likewise.
+ (_gcry_cipher_init): Don't modify ->flags.disabled.
+ * cipher/mac.c (_gcry_mac_init): Don't modify ->flags.disabled.
+ (check_mac_algo): Check ->flags.fips.
+ (mac_open, _gcry_mac_selftest): Likewise.
+ * cipher/md.c (check_digest_algo): Check ->flags.fips.
+ (md_enable, _gcry_md_hash_buffer): Likewise.
+ (_gcry_md_hash_buffers_extract, _gcry_md_selftest): Likewise.
+ (_gcry_md_init): Don't modify ->flags.disabled.
+
+ doc: Update doc/gcrypt.texi for random/.
+ + commit 11ef7b50a708b92d94e1e1f47433fc53b3fd2cf3
+ * doc/gcrypt.texi: Address rndgetentropy module. Remove X9.31 RPNG
+ documentation, as the implementation has been removed already.
+
+2022-01-03 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Add support of Key wrap with padding (KWP).
+ + commit 2914f169f95467b9c789000105773b38ad2dea5a
+ * src/gcrypt.h.in (GCRY_CIPHER_EXTENDED): New enum value.
+ * cipher/cipher-aeswrap.c (wrap): New.
+ (_gcry_cipher_keywrap_encrypt, unwrap): Use wrap.
+ (_gcry_cipher_keywrap_encrypt_padding): New.
+ (_gcry_cipher_keywrap_decrypt): Use unwrap.
+ (_gcry_cipher_keywrap_decrypt_padding): New.
+ * cipher/cipher-internal.h: Add declarations.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Support
+ GCRY_CIPHER_EXTENDED.
+ (_gcry_cipher_setup_mode_ops): Extend for GCRY_CIPHER_MODE_AESWRAP.
+ * tests/aeswrap.c: Add two tests from RFC5649.
+
+2021-12-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update for newer autoconf.
+ + commit 3204c3827e9840915af2b6cbf603f3cf51664568
+ * configure.ac (AC_PREREQ): Require >= 2.69.
+ (AC_CONFIG_HEADERS): Use it, instead of AC_CONFIG_HEADER.
+ (AC_HEADER_STDC): Remove.
+ * m4/sys_socket_h.m4: Remove.
+
+2021-12-21 Danny Tsen <dtsen@us.ibm.com>
+
+ AES-GCM: Bulk implementation of AES-GCM acceleration for ppc64le.
+ + commit 7205c715b3e0f6fd0b853e8916d174048f43c03b
+ * configure.ac: Added p10 assembly implementation file and assiciated file.
+ * cipher/Makefile.am: Added p10 assembly implementation file and associated
+ file.
+ * cipher/rijndael.c: Added p10 function.
+ * cipher/rijndael-p10le.c: New wrapper file for AES-GCM call.
+ * cipher/rijndael-gcm-p10le.s: New implementation of AES-GCM bulk function in
+ Power Assembly.
+ * src/g10lib.h: Added Power arch 3.1 definition for p10.
+ * src/hwf-ppc.c: Added Power arch 3.1 definition for p10.
+ * src/hwfeatures.c: Added Power arch 3.1 definition for p10.
+
+2021-12-21 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ cipher: Fix SM3 avx/bmi2 compilation error.
+ + commit 3b9f746c2fb16234dffe0582059dfe36b2c21bf8
+ * cipher/sm3-avx-bmi2-amd64.S: Change K0-K63 macros to signed decimal.
+
+2021-12-17 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Keep --enable-random-daemon, but not its use from runtime.
+ + commit 27d945084f6926d0ebe8066fb60db785f3a8fb57
+ * configure.ac (--enable-random-daemon): Don't define
+ USE_RANDOM_DAEMON, but use the conditional ENABLE_RANDOM_DAEMON.
+ * src/Makefile.am: Use the conditional ENABLE_RANDOM_DAEMON.
+
+ random: Remove random-daemon use remained.
+ + commit 14f5d73e2731b83b18e9771eb3068c6dbba6f069
+ * configure.ac (--enable-random-daemon): Fix the message.
+ * random/random-csprng.c [USE_RANDOM_DAEMON] (initialize_basics):
+ Remove the dependency to random daemon.
+ * random/random.h [USE_RANDOM_DAEMON]: Likewise.
+
+ fips: Add constructor to run selftests.
+ + commit 45974d87753978b953940045280e9f28f951dbe0
+ * src/fips.c (_gcry_fips_to_activate): New.
+ * src/g10lib.h (_gcry_fips_to_activate): New.
+ * src/global.c [ENABLE_HMAC_BINARY_CHECK] (_gcry_global_constructor):
+ New.
+
+2021-12-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ Simplify the logic for no_secure_memory.
+ + commit 209d98dcf66bd7baeca37cd6b13b31c7f00f4625
+ * src/global.c (_gcry_vcontrol): Don't set NO_SECURE_MEMORY when
+ FIPS mode is enabled.
+ (get_no_secure_memory): Remove. Don't touch NO_SECURE_MEMORY,
+ when examining the variable.
+ (do_malloc, _gcry_is_secure): Just use NO_SECURE_MEMORY.
+
+2021-12-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add SM3 x86-64 AVX/BMI2 assembly implementation.
+ + commit 0c1d55a84c8970b8568ae645f24ce534bebdb5a4
+ * cipher/Makefile.am: Add 'sm3-avx-bmi2-amd64.S'.
+ * cipher/sm3-avx-bmi2-amd64.S: New.
+ * cipher/sm3.c (USE_AVX_BMI2, ASM_FUNC_ABI, ASM_EXTRA_STACK): New.
+ (SM3_CONTEXT): Define 'h' as array instead of separate fields 'h1',
+ 'h2', etc.
+ [USE_AVX_BMI2] (_gcry_sm3_transform_amd64_avx_bmi2)
+ (do_sm3_transform_amd64_avx_bmi2): New.
+ (sm3_init): Select AVX/BMI2 transform function if support by HW; Update
+ to use 'hd->h' as array.
+ (transform_blk, sm3_final): Update to use 'hd->h' as array.
+ * configure.ac: Add 'sm3-avx-bmi2-amd64.lo'.
+
+2021-12-10 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Include the new input files for tests.
+ + commit 02583e1216bc7e6f9f4219771bb274d1fe4491c8
+ * tests/Makefile.am: Include the new .inp files needed for tests
+
+2021-12-09 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests,fips: Align the use of variable in_fips_mode.
+ + commit 7d8403b59a105d2d3e5d0fd9d5d25b7e3b2d2787
+ * tests/pubkey.c (check_run): Fix use of pkey and skey.
+ * tests/*.c (in_fips_mode): No initialize by 0.
+
+2021-12-09 Jakub Jelen <jjelen@redhat.com>
+
+ Adjust tests for proper disablement of non-approve PK operations.
+ + commit 5b82f4b4dbf393d0ce901fc9e0c559c488b013cb
+ * cipher/pubkey.c (_gcry_pk_genkey): Do not allow key generation of
+ disabled key types
+ * tests/benchmark.c (elg_bench): Skip Elgamal keys benchmark in FIPS
+ mode
+ (dsa_bench): Skip DSA keys benchmarking in FIPS mode
+ * tests/dsa-rfc6979.c (check_dsa_rfc6979): DSA keys are no longer
+ allowed in FIPS mode
+ * tests/fips186-dsa.c (global): Use global in_fips_mode flag
+ (check_dsa_gen_186_2): Expect DSA keygen fail in FIPS mode
+ (check_dsa_gen_186_3): Ditto.
+ (main): Use global fips mode flag.
+ * tests/keygen.c (check_elg_keys): Verify Elgamal keys can not be
+ generated in FIPS mode
+ (check_dsa_keys): Verify DSA keys can not be generated in FIPS mode.
+ * tests/pubkey.c (get_elg_key_new): Expect key generation to fail in
+ FIPS mode
+ (get_dsa_key_new): Expect DSA key generation to fail in FIPS mode
+ (get_dsa_key_fips186_new): Ditto.
+ (get_dsa_key_with_domain_new): Ditto.
+ (get_dsa_key_fips186_with_seed_new): Ditto.
+ (check_run): Do not try the Elgamal and DSA key operations in FIPS
+ mode.
+ * tests/t-dsa.c (one_test_sexp): Skip the DSA tests in FIPS mode.
+
+2021-12-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Add tests for gcry_pk_hash_sign/verify API.
+ + commit a0a2b6796f58f9aac0fe49100b1ee4c68f9bdc72
+ * tests/Makefile.am (tests_bin): Add t-dsa t-ecdsa t-rsa-pss t-rsa-15.
+ * tests/t-dsa.c, tests/t-ecdsa.c: New tests.
+ * tests/t-rsa-15.c, tests/t-rsa-pss.c: New tests.
+ * tests/t-dsa.inp, tests/t-ecdsa.inp: New data for tests.
+ * tests/t-rsa-15.inp, tests/t-rsa-pss.inp: New data for tests.
+
+2021-12-08 Jakub Jelen <jjelen@redhat.com>
+
+ fips: Disable DSA in FIPS mode.
+ + commit ea362090fc11caa28643153fc6444442243c8765
+ * cipher/dsa.c (run_selftests): Disable DSA spec in FIPS mode.
+ * src/fips.c (run_pubkey_selftests): Skip DSA power-on selftests.
+
+2021-12-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Remove random-fips.c from repo.
+ + commit 5521cac32d75f2b94894cd5a94deb2c5d25f43a5
+ * random/random-fips.c: Remove.
+
+2021-12-07 Alexander Kanavin <alex.kanavin@gmail.com>
+
+ build: cipher/Makefile.am, doc/Makefile.am: add a missing space.
+ + commit 05472c1882df2fb84b867c0bdbbff510065785ba
+ * cipher/Makefile.am: Add a space.
+ * doc/Makefile.am: Ditto.
+
+2021-12-07 NIIBE Yutaka <gniibe@fsij.org>
+
+ md: Fix disabled check.
+ + commit 8ca3fe07d03e9329ee97534f40208593cde11bf7
+ * cipher/md.c (md_enable): Fix accessing the disabled flag.
+
+2021-12-07 Jakub Jelen <jjelen@redhat.com>
+
+ Properly enforce disablement in other pubkey API.
+ + commit e96980022e5ec079c9d4e3492eb6a1131c68e0f2
+ * cipher/pubkey.c (_gcry_pk_encrypt): Fail if algo is disabled
+ (_gcry_pk_decrypt): Ditto.
+ (_gcry_pk_sign): Ditto.
+ (_gcry_pk_sign_md): Ditto.
+ (_gcry_pk_verify): Ditto.
+ (_gcry_pk_verify_md): Ditto.
+ (_gcry_pk_testkey): Ditto.
+ (_gcry_pk_get_nbits): Ditto.
+ (_gcry_pk_get_curve): Ditto.
+ * tests/basic.c (check_pubkey): Test also other API in FIPS mode to
+ verify they fail as expected.
+
+2021-12-07 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Add paren for readability.
+ + commit bea8b9672c3c47c9bffb7edc52fb32cf9091c231
+ * tests/basic.c (check_pubkey): Add parentheses.
+
+ md: Fix checking to use ->disabled instead of ->fips directly.
+ + commit 3152a565d9a426b6c984e161d1a95a8df347dc15
+ * cipher/md.c (md_enable): Check by ->disabled.
+ (_gcry_md_hash_buffer, _gcry_md_hash_buffers_extract): Likewise.
+
+ random: Remove use of experimental random daemon.
+ + commit 754ad5815b5bb7462260414f2bc5f449bee0b1c6
+ * random/Makefile.am (librandom_la_SOURCES): Remove random-daemon.c.
+ * random/random-daemon.c: Remove.
+ * random/rand-internal.h: Remove declarations.
+ * random/random-csprng.c (_gcry_rngcsprng_set_daemon_socket)
+ (_gcry_rngcsprng_use_daemon): Remove.
+ [USE_RANDOM_DAEMON] (_gcry_rngcsprng_randomize): Don't call
+ _gcry_daemon_randomize.
+ * random/random.c (_gcry_set_random_daemon_socket)
+ (_gcry_use_random_daemon): Remove.
+ * src/global.c (_gcry_vcontrol): Return GPG_ERR_NOT_SUPPORTED.
+ * tests/benchmark.c (main): Remove support of use_random_daemon.
+
+2021-12-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Release memory in DRBG.
+ + commit 751fcadd34ed42b2e595664e9ec3f88fd074d7b7
+ * random/random-drbg.c (_gcry_rngdrbg_close_fds): Release DRBG_STATE.
+
+ fips: Factor out check_fips_system_setting function.
+ + commit 5425052f38cd41a99469e4c3245a1c3e037410fe
+ * src/fips.c (check_fips_system_setting): New.
+ (_gcry_initialize_fips_mode): Use the new function.
+
+ cipher,tests: Consitent use of #if/#endif for algo selection.
+ + commit b14aaf1a2dc71560e1f7c19ac88a7b16cc491f25
+ * cipher/cipher.c: Use #if instead of #ifdef for algo.
+ * cipher/mac-cmac.c: Likewise.
+ * cipher/mac-hmac.c: Likewise.
+ * cipher/mac-internal.h: Likewise.
+ * cipher/mac.c: Likewise.
+ * tests/basic.c: Likewise.
+
+2021-12-06 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Conditionalize other algorithms that might not be built-in.
+ + commit 57b61b0f4f1be7513ed064a90321849bb9f47f29
+ * tests/basic.c (check_cbc_mac_cipher): Do not run DES tests without DES
+ being built-in.
+ (check_ecb_cipher): Do not run blowfish and DES tests without them
+ being built-in
+ (check_cfb_cipher): Do not run DES tests without DES being built-in.
+ (check_ccm_cipher): Do not run camellia tests without it being
+ built-in.
+ (check_ocb_cipher): Do not run Camellia, Twofish and Serpent tests
+ without them being built-in.
+ (check_digests): Do not run SM3 tests without them being built-in.
+ (check_digests): Do not run DES, Camellia and GOST tests without them
+ being built-in.
+
+ tests: Unbreak tests with SM4 disabled.
+ + commit b601ef4dc9f9a337e3019fc5ad3c7b31fcdc43f3
+ * tests/basic.c (check_ecb_cipher): Do not run SM4 tests when SM4 is not
+ built.
+ (check_ctr_cipher): Ditto.
+ (check_cfb_cipher): Ditto.
+ (check_ofb_cipher): Ditto.
+ (check_ocb_cipher): Ditto.
+
+2021-12-03 NIIBE Yutaka <gniibe@fsij.org>
+ Jakub Jelen <jjelen@redhat.com>
+
+ rsa: Allow e=0 to select 65537 for keygeneration under X931.
+ + commit e4a450d1d966cf19cc5ba4d772254be08782e463
+ * cipher/rsa.c (generate_x931): Use e=65537.
+
+2021-12-03 Jakub Jelen <jjelen@redhat.com>
+
+ random: Add missing header file to the release tarball.
+ + commit 78ce1f9e0afe296eab916f1b547f967166f80e10
+ * random/Makefile.am: Add missing header file.
+
+2021-12-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ gcry_mpi_sub_ui: fix subtracting from negative value.
+ + commit d5bf106468e6c6b0f33b193abf04590e4e9fc011
+ * mpi/mpi-add.c (_gcry_mpi_sub_ui): Set output sign bit when 'u'
+ is negative.
+ * tests/mpitests.c (test_add): Additional tests for mpi_add_ui; Check
+ test output and fail if output does not match expected.
+ (test_sub): Additional tests for mpi_sub_ui; Check test output and fail
+ if output does not match expected.
+ (test_mul): Additional tests for mpi_mul_ui; Check test output and fail
+ if output does not match expected.
+
+2021-12-01 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Fix basic.c to show useful information on error.
+ + commit bff9ed54285b9a332382589d89e317da987b5b38
+ * tests/basic.c (check_ctr_cipher): Assign return value to ERR.
+ (check_siv_cipher, check_ccm_cipher): Likewise.
+
+2021-12-01 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Improve error checking in regards to FIPS.
+ + commit c8d2b0069e3cc97138c4e09224a84bb6ccf1b6b5
+ * tests/basic.c (check_cbc_mac_cipher): Improve verbose alignment
+ (check_ecb_cipher): Improve verbose message alignment.
+ (check_ctr_cipher): Improve verbose message alignment.
+ (check_cfb_cipher): Improve verbose message alignment and error
+ reporting.
+ (check_ofb_cipher): Improve verbose message alignment and error
+ reporting.
+ (_check_gcm_cipher): Improve error checking.
+ (_check_eax_cipher): Improve error checking.
+ (check_siv_cipher): Improve error checking.
+ (check_gcm_siv_cipher): Improve error checking and indentation.
+ (_check_poly1305_cipher): Improve verbose message alignment.
+ (check_ccm_cipher): Improve verbose message alignment.
+ (do_check_ocb_cipher): Improve error checking.
+ (check_ocb_cipher_largebuf_split): Improve error checking.
+ (check_ocb_cipher_checksum): Improve error checking.
+ (check_ocb_cipher_splitaad): Improve error checking.
+ (check_gost28147_cipher_basic): Improve verbose message alignment.
+ (check_stream_cipher): Improve verbose message alignment.
+ (check_one_cipher_core): Improve error checking.
+ (check_ciphers): Improve error checking.
+ (check_pubkey): Check explicitly the for failure in FIPS mode.
+
+ Disable 3DES in FIPS mode.
+ + commit 23a58b779e31e6244a481c26096d1ad061eb024c
+ * cipher/des.c (_gcry_cipher_spec_tripledes): Mark as non-FIPS
+ * cipher/mac-cmac.c ( _gcry_mac_type_spec_cmac_tripledes): Mark non-FIPS
+ * src/fips.c (run_cipher_selftests): skip 3DES selftests)
+ (run_mac_selftests): skip CMAC_3DES selftests
+ * tests/basic.c (check_cfb_cipher): Do not expect the 3DES working in
+ FIPS mode
+
+2021-11-30 Jakub Jelen <jjelen@redhat.com>
+
+ Implement explicit FIPS indicators for cipher modes.
+ + commit 3d38968f4b751c5561679040c055c34a690bed75
+ * src/fips.c (_gcry_fips_indicator): New.
+ * src/g10lib.h (_gcry_fips_indicator): New declaration.
+ * src/gcrypt.h.in (gcry_ctl_cmds): New GCRYCTL_FIPS_SERVICE_INDICATOR
+ * src/global.c (_gcry_vcontrol): Handle GCRYCTL_FIPS_SERVICE_INDICATOR
+ * tests/basic.c (do_check_ocb_cipher): Check excplicit FIPS indicator
+ (check_ocb_cipher_largebuf_split): Ditto.
+ (check_ocb_cipher_checksum): Ditto.
+ (check_ocb_cipher_splitaad): Ditto.
+ (check_bulk_cipher_modes): Ditto.
+
+2021-11-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Release random resources after selftests.
+ + commit 40ab39966650489449bee3e2a68f43a9d38c4dd4
+ * src/fips.c (_gcry_fips_is_operational): Call _cgry_random_close_fds.
+
+ random: Extend semantics of _gcry_random_close_fds.
+ + commit 204be8a385ae6140175e3b495989a261410c34d0
+ * random/random-csprng.c (_gcry_rngcsprng_close_fds): Add
+ de-initialization.
+ * random/random-drbg.c (_gcry_rngdrbg_close_fds): Likewise.
+
+2021-11-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Do not build 'cipher/' assembly files when --disable-asm used.
+ + commit 33f1a7ad3cd13602d8bffe156f383c3a704dfd67
+ * configure.ac: Collect assembly implementation *.lo files under
+ GCRYPT_ASM_CIPHERS and GCRYPT_ASM_DIGEST for --disable-asm
+ selection.
+
+ Do not build poly1305-s390x.S on foreign architectures.
+ + commit f10fa6b9a6ca7565408c4685d88a38893396d02b
+ * configure.ac [host=s390x-*-*]: Add 'poly1305-s390x.lo'.
+ * cipher/Makefile.am: Move 'poly1305-s390x.S' to
+ 'EXTRA_libcipher_la_SOURCES'.
+
+ jitterentropy: use wipememory for jent_memset_secure.
+ + commit a44301f6d2051b6b4e20b4459f41aa2b95f8b2b7
+ * random/jitterentropy-base-user.h (jent_memset_secure): Use wipememory.
+
+ jitterentropy: fix building on Win32.
+ + commit c38ebc3b6c7d6844209a58677379b61750b6504d
+ * random/jitterentropy.h (jent_notime_ctx): Add #ifdef
+ JENT_CONF_ENABLE_INTERNAL_TIMER around pthread variables.
+
+2021-11-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Remove tweak for FIPS enabled.
+ + commit 1183ffdd7a242955c1cc34eef0b02c002202a9ec
+ * tests/t-secmem.c (test_secmem): Remove the tweak.
+
+ jitternetropy: Put our local change to use non-secure memory.
+ + commit 85cb7375fec39bb9fb195ca0bbe95bbbfd6deb98
+ * random/jitterentropy-base.c (jent_entropy_collector_alloc_internal):
+ Let jent_memaccess use normal memory.
+
+ build: Fix excess quotation to enable config.status --recheck works.
+ + commit 17f9eb20c94fd6711370546437b7150dc11a6335
+ * configure.ac (DEF_HMAC_BINARY_CHECK): Fix quatation.
+
+ random: Fix rndgetentropy correctly uses rndjent.
+ + commit 5493282b4aacd6b466c4ddd366ce9eb4036b3562
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): Call
+ _gcry_rndjent_poll for GCRY_VERY_STRONG_RANDOM.
+
+2021-11-17 NIIBE Yutaka <gniibe@fsij.org>
+
+ jitterentropy: Use jent_read_entropy_safe for rndjent.
+ + commit 2101da04924b1361e2a1021b406a519a3bde9aee
+ * random/rndjent.c (_gcry_rndjent_poll): Use jent_read_entropy_safe.
+
+ Fix jent_read_entropy for JENT_CPU_JITTERENTROPY_SECURE_MEMORY.
+ + commit d0fcb4da98a05097bc0cd6dc7377cb02aaa8b61c
+ * random/jitterentropy-base.c (jent_read_entropy): Fix conditional
+ compile.
+
+ jitterentropy: Fix for C90 compiler.
+ + commit cf85258e6aff87f5b0614097b4ff2972ceb703fd
+ * random/jitterentropy-noise.c (jent_hash_time): Declare hash_loop_cnt
+ at the beginning of the function.
+
+ jitterentropy: Disable use of pthread.
+ + commit 964c9c5eee30cc45488b88ec4c0199a41861e4aa
+ * random/jitterentropy.h (JENT_CONF_ENABLE_INTERNAL_TIMER): Undefine.
+ * random/jitterentropy-base.c [JENT_CONF_ENABLE_INTERNAL_TIMER]
+ (jent_entropy_switch_notime_impl): Add conditional compilation.
+ * random/jitterentropy-base-user.h [JENT_CONF_ENABLE_INTERNAL_TIMER]
+ (jent_yield): Likewise.
+ * random/jitterentropy.h [JENT_CONF_ENABLE_INTERNAL_TIMER]
+ (jent_entropy_switch_notime_impl): Likewise.
+
+ jitterentropy: Fix building rndjent.
+ + commit d5ae5229db70f71301a3f3eefdd38a73a4fde499
+ * random/Makefile.am: Update for new jitterentropy.
+ * random/rndjent.c: Update to include the other files.
+
+ jitterentropy: Merge from jitterentropy-library-3.3.0.
+ + commit 3bacdac611b9eb3bd5ae8d78156b1110e77e9518
+ * random/jitterentropy-base.h: New.
+ * random/jitterentropy-gcd.c: New.
+ * random/jitterentropy-gcd.h: New.
+ * random/jitterentropy-health.c: New.
+ * random/jitterentropy-health.h: New.
+ * random/jitterentropy-noise.c: New.
+ * random/jitterentropy-noise.h: New.
+ * random/jitterentropy-sha3.c: New.
+ * random/jitterentropy-sha3.h: New.
+ * random/jitterentropy-timer.c: New.
+ * random/jitterentropy-timer.h: New.
+ * random/jitterentropy-base.c: Update.
+ * random/jitterentropy.h: Update.
+ * random/jitterentropy-base-user.h: Update, keeping ours mostly.
+
+2021-11-15 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add intel-pclmul accelerated POLYVAL for GCM-SIV.
+ + commit 5e0187d84fc16d9ff0fbb0ccd4348657fea90d36
+ * cipher/cipher-gcm-intel-pclmul.c (gfmul_pclmul_aggr4)
+ (gfmul_pclmul_aggr8): Move assembly to new GFMUL_AGGRx_ASM* macros.
+ (GFMUL_AGGR4_ASM_1, GFMUL_AGGR4_ASM_2, gfmul_pclmul_aggr4_le)
+ (GFMUL_AGGR8_ASM, gfmul_pclmul_aggr8_le)
+ (_gcry_polyval_intel_pclmul): New.
+ * cipher/cipher-gcm-siv.c (do_polyval_buf): Use polyval function
+ if available.
+ * cipher/cipher-gcm.c (_gcry_polyval_intel_pclmul): New.
+ (setupM): Setup 'c->u_mode.gcm.polyval_fn' with accelerated polyval
+ function if available.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add member
+ 'u_mode.gcm.polyval_fn'.
+
+2021-11-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Include getentropy random module.
+ + commit ec671cfa239888b67fcafda40b19006b61d9bbf2
+ * random/rand-internal.h (_gcry_rndgetentropy_gather_random): Add.
+ * random/random-csprng.c [USE_RNDLINUX] (_gcry_rngcsprng_close_fds)
+ (getfnc_gather_random): Support getentropy random module.
+ * random/random-drbg.c: Likewise.
+ * random/random-fips.c: Likewise.
+ * random/random-system.c: Likewise.
+ * src/global.c [USE_RNDLINUX] (print_config): Show getentropy.
+
+ build: Support rndgetentropy random module.
+ + commit e562e34c824dda9ce1c4a0af58e8366699a3d88b
+ * configure.ac: Add getentropy random module.
+ * random/Makefile.am (EXTRA_librandom_la_SOURCES): Add.
+
+ random:getentropy: Simplify more.
+ + commit 6de43f11c625de381e75f01ce83cbb2d2634fb35
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): Remove
+ 'if'.
+
+ random:getentropy: Limit the size of buffer in exact size.
+ + commit cebe5c78a9493c7b4ee894305c0ede0899815e6a
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random):
+ Redundant space had no sense.
+
+ random: Simplify rndgetentropy.
+ + commit a8395fd7a40f4d9a8f57154a28cd1cae97e708f2
+ * random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): Simply
+ call getentropy.
+
+ random: Start rnd-getentropy.c.
+ + commit f36bfe7ec1b2cef7760aa338292fadb93783ced4
+ * random/rnd-getentropy.c: Copied from rndlinux.c.
+
+2021-11-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests:pkcs1v2: Skip tests with small keys in FIPS mode.
+ + commit 1481607cb9db977468a75f9f4638dc1cf3ade007
+ * tests/pkcs1v2.c (in_fips_mode): New.
+ (check_oaep): Skip when key size is less than 2048 in FIPS mode.
+ (check_pss, check_v15crypt, check_v15sign): Likewise.
+
+ tests:pubkey: Replace RSA key to one of 2k.
+ + commit 66119e0c1a024f7cf059393c3db827eb338339b0
+ * tests/pubkey.c (sample_private_key_1): Use 2k key from basic.c.
+ (sample_private_key_1_1): Likewise.
+ (sample_private_key_1_2): Likewise.
+
+2021-11-09 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Benchmark also larger RSA keys in FIPS mode.
+ + commit 2a899b5b84583f2e68bd8564034aa10846810e85
+ * tests/benchmark.c (rsa_bench): Test also large RSA keys in FIPS mode
+
+ tests: Explicit FIPS checking for symmetric algorithms.
+ + commit fb931073707ed521366f0e4a2e54b3935ce649a3
+ * tests/basic.c (FLAG_CFB8): New.
+ (check_ecb_cipher): Introduce new flag and explicitly check for
+ algorithm functionality in regards to FIPS.
+ (check_ctr_cipher): Ditto.
+ (check_cfb_cipher): Replace the cfb8 flag with generic flag and
+ explicitly check for algorithm funcionality in regards to FIPS.
+ (check_ofb_cipher): Introduce new flag and explicitly check for
+ algorithm functionality in regards to FIPS.
+ (_check_poly1305_cipher): Explicitly check functionality in regards to
+ FIPS mode.
+ (check_ccm_cipher): Introduce new flag and explicitly check for
+ algorithm functionality in regards to FIPS.
+ (check_gost28147_cipher_basic): Explicitly check functionality in
+ regards to FIPS mode.
+ (check_stream_cipher_large_block): Explicitly check functionality in
+ regards to FIPS mode.
+
+2021-11-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ dsa: Add checks in FIPS mode.
+ + commit df66bd94e6e3650216b0d179d79d4c296f173855
+ * cipher/dsa.c (dsa_check_keysize): New.
+ (generate_fips186): Add call to dsa_check_keysize.
+ (dsa_sign, dsa_verify): Likewise.
+ * tests/benchmark.c (dsa_bench): Skip 1024-bit.
+ * tests/dsa-rfc6979.c (check_dsa_rfc6979): 1024-bit
+ now fails.
+ * tests/fips186-dsa.c (main): Only test check_dsa_gen_186_3 in FIPS
+ mode.
+
+2021-11-08 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Add 2k RSA key working in FIPS mode.
+ + commit 1f45fec2082247f3634af050f1fdbf0a5858cf46
+ * tests/basic.c (check_pubkey): The 1k RSA keys are no longer supposed
+ to be working so have a new 2k one that should work. Taken from
+ ciper/rsa.c's sample_secret_key.
+
+2021-11-08 Jakub Jelen <jjelen@redhat.com>
+ NIIBE Yutaka <gniibe@fsij.org>
+
+ rsa: Check keylen constraints for key operations.
+ + commit 40d63d09b2d06631f4d2c3d1b167a620d50c99f8
+ * cipher/rsa.c (rsa_check_keysize): New.
+ (generate_fips): Factor out the bits check.
+ (rsa_encrypt): Add checking key length.
+ (rsa_decrypt, rsa_sign, rsa_verify): Likewise.
+
+2021-11-08 NIIBE Yutaka <gniibe@fsij.org>
+ NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Expect errors from algorithms not supported in FIPS mode.
+ + commit cc3571a1f2244bdf829d7d16dd546131711eb8a9
+ * tests/basic.c (FLAG_NOFIPS): New.
+ (check_pubkey_sign): Pass and handle NOFIPS flag.
+ (check_pubkey_sign_ecdsa): Likewise.
+ (check_pubkey_crypt): Likewise.
+ (do_check_one_pubkey): Pass flags.
+ (check_pubkey): Mark explicitly algorithms expected not to work in
+ FIPS mode and make sure they fail.
+
+2021-11-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Fix basic.c:check_pubkey.
+ + commit 1b29be8e7e49a6ee04734b86db5732dc3eaca84b
+ * tests/basic.c (check_pubkey): Don't call check_one_pubkey_new
+ multiple times.
+
+2021-11-08 Jakub Jelen <jjelen@redhat.com>
+
+ cipher: Respect the disabled flag of pubkey algorithms.
+ + commit ff5ab6a809345112f02a6037957ef21bc4bf3bce
+ * cipher/pubkey.c (check_pubkey_algo): Check the disabled flag before
+ using the algorithm.
+
+2021-11-05 Jakub Jelen <jjelen@redhat.com>
+
+ doc: Reference the new FIPS 140-3.
+ + commit 976673425784eb2d056a4dbbe13b6d2ca5f8cbf2
+ * doc/gcrypt.texi: Replace -2 with -3
+ * cipher/ecc-curves.c: Replace -2 with -3
+
+2021-11-01 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher:md: Check digest algo is supported when FIPS enabled.
+ + commit cfd1dd6a838f70324a749dad0d589bc2dbe33651
+ * cipher/md.c (_gcry_md_hash_buffer): Check for FIPS for
+ hash_buffers method case.
+ (_gcry_md_hash_buffers_extract): Likewise.
+
+2021-10-29 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Allow opaque MPI with zero length.
+ + commit 34d55589b7d91a239435d77e3d45cf0deeba59b6
+ * mpi/mpiutil.c (_gcry_mpi_copy): Support zero length.
+
+2021-10-25 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/bench-slope: avoid divide by zero.
+ + commit ecd4d348ac87c073ced38eb1e6dbec03b532cdf2
+ * tests/bench-slope.c (safe_div): New.
+ (get_slope): Make static; Skip if number of points is too small; Use
+ safe_div.
+ (do_slope_benchmark): Retry benchmark if result does not make sense;
+ Limit retries to 4 for non-auto-ghz and 1000 for auto-ghz.
+ (get_auto_ghz, do_slope_benchmark, bench_print_result_csv)
+ (bench_print_result_std): Use safe_div.
+
+ md: clear context with wipememory to avoid false warning.
+ + commit 5881114e08601745857a68bc3318f3421155f645
+ * cipher/md.c (md_open): Initialize ctx with wipememory2 instead
+ of memset.
+
+ cipher/sha512: fix 'accessing 64 bytes in a region of size 8' warnings.
+ + commit 6333cdeee5c1ca5bd4255f9cdcd266db314a2122
+ * cipher/sha512.c (SHA512_STATESHA256_CONTEXT): Replace h0-h7 with h[8].
+ (do_sha512_transform_i386_ssse3, do_sha512_transform_ppc8)
+ (do_sha512_transform_ppc9, do_sha512_transform_s390x)
+ (do_sha512_final_s390x, sha512_init, sha384_init, sha512_256_init)
+ (sha512_224_init, do_transform_generic, sha512_final): Convert use
+ of h0-h7 to h[0]-h[7].
+
+ poly1305: fix building with 'arm-linux-gnueabihf-gcc-11 -O3'
+ + commit e4ce7ad0ecf6c356fa377e139d08c4dbcf6bf533
+ * cipher/poly1305.c [HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS]
+ (ADD_1305_32): Reduce number of register operands.
+
+2021-10-20 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Reject SHA-1 for hash+sign/verify when FIPS enabled.
+ + commit a23cf78102f3200dc441a3123c3fbeaa28f38b50
+ * cipher/pubkey.c (_gcry_pk_sign_md): Reject SHA-1 when FIPS.
+ (_gcry_pk_verify_md): Likewise.
+
+2021-10-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ doc: Add entries for hash+sign functions.
+ + commit 8f31f652d453f480d4d2559dfa17e7bd42145a49
+
+
+2021-10-15 Jakub Jelen <jjelen@redhat.com>
+
+ fips: Improve selftests invocation.
+ + commit d45db4ad16fec0fe7d32aae60f356a386fbf909b
+ * src/fips.c (run_digest_selftests): Skip SHA256 selftest if they were
+ already executed as part of the integrity check.
+ (run_mac_selftests): Skip HMAC-SHA256 selftest if they were already
+ executed as part of the integrity check.
+ (run_hmac_sha256_selftests): Run SHA256 selftest too.
+ (_gcry_fips_run_selftests): Run the sha256 selftests regardless of the
+ fips mode status.
+
+2021-10-14 Jakub Jelen <jjelen@redhat.com>
+
+ fips: Verify library integrity before running selftests.
+ + commit d2c68849d19bd0ed4c8c3c040c5939737aa15981
+ * src/fips.c (run_hmac_sha256_selftests): New function.
+ (_gcry_fips_run_selftests): Move integrity check earlier and run
+ HMAC-SHA256 tests before that.
+
+ cipher: Allow generation of RSA keys > 2k.
+ + commit bba63fab1a22232e494d3de93d74280d300faf8d
+ * cipher/rsa.c (generate_fips): Allow any larger key than 2k in FIPS
+ mode.
+
+2021-10-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Support specifying HMAC key by --enable-hmac-binary-check.
+ + commit 10e02b90f65f3a85d72a719806b9d8873377c1a4
+ * configure.ac (DEF_HMAC_BINARY_CHECK): New SUBSTITUTION.
+ (DL_LIBS): Fix the condition.
+ * src/Makefile.am (libgcrypt_la_CFLAGS): Use DEF_HMAC_BINARY_CHECK.
+ (hmac256_CFLAGS): Likewise.
+
+2021-10-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Use KEY_FOR_BINARY_CHECK for --enable-hmac-binary-check.
+ + commit 0709359657633271c8c018d67b40d9052c630022
+ * src/fips.c (KEY_FOR_BINARY_CHECK): Allow supplying externally.
+ * src/hmac256.c: Use KEY_FOR_BINARY_CHECK macro.
+
+2021-10-08 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cipher/sha256: fix 'accessing 32 bytes in a region of size 4' warnings.
+ + commit 95425c6b0b96a4d2eae4e2a55a23d293b08f7993
+ * cipher/sha256.c (SHA256_CONTEXT): Replace h0-h7 with h[8].
+ (do_sha256_transform_amd64_ssse3, do_sha256_transform_amd64_avx)
+ (do_sha256_transform_amd64_avx2, do_sha256_transform_intel_shaext)
+ (do_sha256_transform_armv8_ce, do_sha256_transform_ppc8)
+ (do_sha256_transform_ppc9, do_sha256_transform_s390x)
+ (do_sha256_final_s390x, sha256_init, sha224_init)
+ (do_transform_generic, sha256_final): Convert use of h0-h7 to h[0]-h[7].
+
+2021-10-07 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Add sign+hash, verify+hash, and random-override API.
+ + commit 082ea0efa9b129e8ca7703eeb6b1c9325caeedfd
+ * cipher/pubkey.c (_gcry_pk_sign_md, _gcry_pk_verify_md): New.
+ (_gcry_pk_random_override_new): New.
+ (_gcry_pk_get_random_override): New.
+ * src/gcrypt-int.h: Add those routines.
+ * src/context.h (CONTEXT_TYPE_RANDOM_OVERRIDE): New.
+ * src/context.c (_gcry_ctx_alloc, _gcry_ctx_release): Handle
+ CONTEXT_TYPE_RANDOM_OVERRIDE.
+ * src/gcrypt.h.in (gcry_error_t gcry_pk_hash_sign): New.
+ (gcry_error_t gcry_pk_hash_verify): New.
+ (gcry_pk_random_override_new): New.
+ * src/libgcrypt.def, src/libgcrypt.vers: Update.
+ * src/visibility.c (gcry_pk_hash_sign, gcry_pk_hash_verify): New.
+ (gcry_pk_random_override_new): New.
+ * src/visibility.h: Add those routines.
+
+ cipher:dsa,ecdsa: Support supplying K externally.
+ + commit 16a9eaad5d1add3a95b1da6e037b074f18b094c7
+ * cipher/dsa.c (sign): Add an argument K for DSA.
+ (test_keys, dsa_sign): Follow the change.
+ * cipher/ecc-common.h (_gcry_ecc_ecdsa_sign): Likewise for ECDSA.
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Likewise for ECDSA.
+ * cipher/ecc.c (test_keys, ecc_sign): Follow the change.
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Support "label"
+ for K.
+
+2021-10-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix building for Win64 target.
+ + commit 9fc0d145278d46bb129660a57b7ca2f94577d461
+ * random/random-csprng.c [HAVE_W32_SYSTEM]: Include <windows.h>.
+ * tests/bench-slope.c [_WIN32]: Include <windows.h>.
+
+2021-10-05 NIIBE Yutaka <gniibe@fsij.org>
+
+ build,gcrypt.h: Don't define gcry_socklen_t.
+ + commit 71d4d592d8910ea6f9e091ae578cf68907cb5758
+ * configure.ac (FALLBACK_SOCKLEN_T): Remove.
+ * src/gcrypt.h.in: Remove FALLBACK_SOCKLEN_T.
+
+ build,gcrypt.h: Remove INSERT_SYS_SELECT_H.
+ + commit 0f43570af93e56bdd4a4b2bf6eef722d0bff4a4f
+ * configure.ac (INSERT_SYS_SELECT_H): Remove.
+ Remove checking sys/select.h.
+ * src/gcrypt.h.in: Remove INSERT_SYS_SELECT_H.
+
+2021-10-05 NIIBE Yutaka <gniibe@fsij.org>
+ Tomáš Mráz <tm@t8m.info>
+
+ random: Use poll instead of select.
+ + commit 7da42a8e8cc587ced46dffefc8448c8a286b1ca0
+ * random/rndlinux.c (open_device): Use poll.
+ (_gcry_rndlinux_gather_random): Use poll.
+
+2021-09-27 Werner Koch <wk@gnupg.org>
+
+ tests: Remove old CAVS test scripts.
+ + commit db928d97b4b69f9aa1fee3c2a38a138534608c89
+ * tests/cavs_driver.pl: Remove.
+ * tests/cavs_tests.sh: Remove
+ * tests/Makefile.am: (EXTRA_DIST): Remove them.
+
+2021-09-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ libtool: Link without -flat_namespace for macOS.
+ + commit c9cebf3d1824d6ec90fd864a744bb81c97ac7d31
+ * m4/libtool.m4: Not setting 10.0 to MACOSX_DEPLOYMENT_TARGET when not
+ defined. Only specify -flat_namespace to linker for specific
+ (older) versions and hosts.
+
+2021-09-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Add hmac256.h to distribution.
+ + commit 9511f469363b629a06e1f3dab6ee4ba333e72b93
+ * src/Makefile.am (hmac256_SOURCES): Add hmac256.h.
+
+2021-09-20 Jakub Jelen <jjelen@redhat.com>
+
+ Allow passing FIPS module version.
+ + commit c74fde0c3f6114c594332fb28a09c7b817969231
+ * README: Document new --with-fips-module-version=version switch
+ * configure.ac: Implementation of the --with-fips-module-version
+ * src/global.c (print_config): Print FIPS module version from above
+
+ Remove the forced fips mode.
+ + commit 3f4dd47ba74e0a9f18feba1809eeddff8790707e
+ * cipher/rsa.c (generate_fips): Drop reference to enforced fips mode and
+ use normal FIPS mode check
+ * doc/gcrypt.texi: Drop references to enforced FIPS mode
+ * src/fips.c (enforced_fips_mode): Removed
+ (_gcry_initialize_fips_mode): Remove reading of the FIPS_FORCE_FILE
+ to enforce FIPS mode
+ (_gcry_enforced_fips_mode): Remove
+ (_gcry_set_enforced_fips_mode): Remove
+ * src/g10lib.h (_gcry_enforced_fips_mode): Remove declaration
+ (_gcry_set_enforced_fips_mode): Remova declaration
+ * src/global.c (print_config): Remove the forced fips flag
+ (_gcry_vcontrol): Deprecate GCRYCTL_SET_ENFORCED_FIPS_FLAG
+ (get_no_secure_memory): Ignore the option in FIPS mode
+
+ Remove a way to inactive FIPS mode.
+ + commit edbc1dd10bc3e1fcc0e355fe1a9c4c8769f51daf
+ * cipher/md.c (_gcry_md_hash_buffer): Remove inactivation of FIPS mode
+ when MD5 is used
+ (_gcry_md_hash_buffers_extract): Ditto.
+ * src/fips.c (gcry_is_fips_mode_inactive): Removed
+ (_gcry_inactivate_fips_mode): Removed
+ (_gcry_is_fips_mode_inactive): Removed
+ * src/g10lib.h (_gcry_inactivate_fips_mode): Remove declaration
+ (_gcry_is_fips_mode_inactive): Remove declaration
+ * global.c (_gcry_vcontrol): Update the GCRYCTL_FIPS_MODE_P
+ (_gcry_set_allocation_handler): Silently ignore custom alocation
+ handlers in FIPS mode
+
+2021-09-16 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Improve FIPS detection in curves test.
+ + commit fd116968ef2dcecb4058be2b2b3e8ab90f1e3181
+ * tests/curves.c (check_matching): When FIPS mode enabled, skip a test
+ with sample_key_2, which uses brainpoolP160r1 curve.
+ (check_get_params): Replace "error_expected" filed to "flags" to hold
+ TEST_ERROR_EXPECTED and/or TEST_NOFIPS. Put TEST_NOFIPS flags for
+ non-FIPS curves. When FIPS mode enabled, don't skip supported curves.
+
+ tests: Fix typo in comment.
+ + commit f9ae351c954c01a382c8ac915298efa25fc45177
+ * tests/curves.c: Typo in comment
+
+2021-09-14 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Fix support of sha512-224 and sha512-256.
+ + commit d04b1be9edacd7be6f03faba6f4d6c44c4247eb7
+ * cipher/pubkey-util.c (get_hash_algo): Add.
+
+ * cipher/sha512.c (sha512_256_asn, sha512_224_asn): Fill correct values.
+
+ cipher: Support internal hashing with "prehash" for RSA PKCS#1.
+ + commit 422031a5943f2e698036e3c0df5955c585f22c16
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Support internal
+ hashing.
+
+2021-09-13 Werner Koch <wk@gnupg.org>
+
+ cipher: Clear AESWRAP scratch area immediately after use.
+ + commit df4fe02794bb3511f7006d641e99736bad091c58
+ * cipher/cipher-aeswrap.c (_gcry_cipher_aeswrap_decrypt): Call
+ wipememory.
+
+2021-08-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add ARMv8-CE HW acceleration for GCM-SIV counter mode.
+ + commit 47e425e07995454573e28c13c08229d2f8a75642
+ * cipher/rijndael-armv8-aarch32-ce.S
+ (_gcry_aes_ctr32le_enc_armv8_ce): New.
+ * cipher/rijndael-armv8-aarch64-ce.S
+ (_gcry_aes_ctr32le_enc_armv8_ce): New.
+ * cipher/rijndael-armv8-ce.c
+ (_gcry_aes_ctr32le_enc_armv8_ce)
+ (_gcry_aes_armv8_ce_ctr32le_enc): New.
+ * cipher/rijndael.c
+ (_gcry_aes_armv8_ce_ctr32le_enc): New prototype.
+ (do_setkey): Add setup of 'bulk_ops->ctr32le_enc' for ARMv8-CE.
+
+ Add x86 HW acceleration for GCM-SIV counter mode.
+ + commit 33aebb30d210768d510a2843d9cc0c0ecd4237d1
+ * cipher/cipher-gcm-siv.c (do_ctr_le32): Use bulk function if
+ available.
+ * cipher/cipher-internal.h (cipher_bulk_ops): Add 'ctr32le_enc'.
+ * cipher/rijndael-aesni.c (_gcry_aes_aesni_ctr32le_enc): New.
+ * cipher/rijndael-vaes-avx2-amd64.S
+ (_gcry_vaes_avx2_ctr32le_enc_amd64, .Lle_addd_*): New.
+ * cipher/rijndael-vaes.c (_gcry_vaes_avx2_ctr32le_enc_amd64)
+ (_gcry_aes_vaes_ctr32le_enc): New.
+ * cipher/rijndael.c (_gcry_aes_aesni_ctr32le_enc)
+ (_gcry_aes_vaes_ctr32le_enc): New prototypes.
+ (do_setkey): Add setup of 'bulk_ops->ctr32le_enc' for AES-NI and
+ VAES.
+ * tests/basic.c (check_gcm_siv_cipher): Add large test-vector for
+ bulk ops testing.
+
+ Add AES-GCM-SIV mode (RFC 8452)
+ + commit 1b8994c4ecf2cb53fff46fa84a95a7c259e7cec7
+ * cipher/Makefile.am: Add 'cipher-gcm-siv.c'.
+ * cipher/cipher-gcm-siv.c: New.
+ * cipher/cipher-gcm.c (_gcry_cipher_gcm_setupM): New.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add 'siv_keylen'.
+ (_gcry_cipher_gcm_setupM, _gcry_cipher_gcm_siv_encrypt)
+ (_gcry_cipher_gcm_siv_decrypt, _gcry_cipher_gcm_siv_set_nonce)
+ (_gcry_cipher_gcm_siv_authenticate)
+ (_gcry_cipher_gcm_siv_set_decryption_tag)
+ (_gcry_cipher_gcm_siv_get_tag, _gcry_cipher_gcm_siv_check_tag)
+ (_gcry_cipher_gcm_siv_setkey): New prototypes.
+ (cipher_block_bswap): New helper function.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Add
+ 'GCRY_CIPHER_MODE_GCM_SIV'; Refactor mode requirement checks for
+ better size optimization (check pointers & blocksize in same order
+ for all).
+ (cipher_setkey, cipher_reset, _gcry_cipher_setup_mode_ops)
+ (_gcry_cipher_setup_mode_ops, _gcry_cipher_info): Add GCM-SIV.
+ (_gcry_cipher_ctl): Handle 'set decryption tag' for GCM-SIV.
+ * doc/gcrypt.texi: Add GCM-SIV.
+ * src/gcrypt.h.in (GCRY_CIPHER_MODE_GCM_SIV): New.
+ (GCRY_SIV_BLOCK_LEN, gcry_cipher_set_decryption_tag): Add to comment
+ that these are also for GCM-SIV in addition to SIV mode.
+ * tests/basic.c (check_gcm_siv_cipher): New.
+ (check_cipher_modes): Check for GCM-SIV.
+ * tests/bench-slope.c (bench_gcm_siv_encrypt_do_bench)
+ (bench_gcm_siv_decrypt_do_bench, bench_gcm_siv_authenticate_do_bench)
+ (gcm_siv_encrypt_ops, gcm_siv_decrypt_ops)
+ (gcm_siv_authenticate_ops): New.
+ (cipher_modes): Add GCM-SIV.
+ (cipher_bench_one): Check key length requirement for GCM-SIV.
+
+ Add SIV mode (RFC 5297)
+ + commit 659a208cb065d686f60e2c4f51856f460d6b44f5
+ * cipher/Makefile.am: Add 'cipher-siv.c'.
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Rename to
+ _gcry_cipher_ctr_encrypt_ctx and add algo context parameter.
+ (_gcry_cipher_ctr_encrypt): New using _gcry_cipher_ctr_encrypt_ctx.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add 'u_mode.siv'.
+ (_gcry_cipher_ctr_encrypt_ctx, _gcry_cipher_siv_encrypt)
+ (_gcry_cipher_siv_decrypt, _gcry_cipher_siv_set_nonce)
+ (_gcry_cipher_siv_authenticate, _gcry_cipher_siv_set_decryption_tag)
+ (_gcry_cipher_siv_get_tag, _gcry_cipher_siv_check_tag)
+ (_gcry_cipher_siv_setkey): New.
+ * cipher/cipher-siv.c: New.
+ * cipher/cipher.c (_gcry_cipher_open_internal, cipher_setkey)
+ (cipher_reset, _gcry_cipher_setup_mode_ops, _gcry_cipher_info): Add
+ GCRY_CIPHER_MODE_SIV handling.
+ (_gcry_cipher_ctl): Add GCRYCTL_SET_DECRYPTION_TAG handling.
+ * doc/gcrypt.texi: Add documentation for SIV mode.
+ * src/gcrypt.h.in (GCRYCTL_SET_DECRYPTION_TAG): New.
+ (GCRY_CIPHER_MODE_SIV): New.
+ (gcry_cipher_set_decryption_tag): New.
+ * tests/basic.c (check_siv_cipher): New.
+ (check_cipher_modes): Add call for 'check_siv_cipher'.
+ * tests/bench-slope.c (bench_encrypt_init): Use double size key for
+ SIV mode.
+ (bench_aead_encrypt_do_bench, bench_aead_decrypt_do_bench)
+ (bench_aead_authenticate_do_bench): Reset cipher context on each run.
+ (bench_aead_authenticate_do_bench): Support nonce-less operation.
+ (bench_siv_encrypt_do_bench, bench_siv_decrypt_do_bench)
+ (bench_siv_authenticate_do_bench, siv_encrypt_ops)
+ (siv_decrypt_ops, siv_authenticate_ops): New.
+ (cipher_modes): Add SIV mode benchmarks.
+ (cipher_bench_one): Restrict SIV mode testing to 16 byte block-size.
+
+ mpi/longlong: fix variable shadowing from MIPS umul_ppmm macros.
+ + commit 9e3b0446653fda6912e91fae84883cdbefdc2195
+ * mpi/longlong.h [__mips__ && W_TIPE_SIZE == 32] (umul_ppmm): Rename
+ temporary variable '_r' to '__r'.
+ [__mips && W_TIPE_SIZE == 64] (umul_ppmm): Ditto.
+
+2021-08-23 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Use offsetof for allocation of gcry_md_context.
+ + commit 581e04386d875672ba6c3fc4a4232ca72bc46c8c
+ * cipher/md.c (md_open): Allocate exact space for the allocation and
+ use offsetof for the calculation.
+
+2021-08-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ hmac: Don't have the second implementation of hmac256.
+ + commit c9acca865ba4abaa4443712f87fb8926fe7ad8b7
+ * src/Makefile.am (libgcrypt_la_SOURCES): Remove hmac256.
+ * cipher/mac-hmac.c (selftests_sha256): Remove the tests.
+
+ fips: Don't use gcry_check_version for integrity check any more.
+ + commit c11788e5641be26371adc90f63e5a191cfc796f8
+ * src/visibility.h [FIPS_FORCE_FILE]: Remove ifdef/endif.
+
+ fips: Use a .rodata1 section integrity check with hmac256.
+ + commit f02dc5235e4751c57b16683ee9a8ef53014c6d13
+ * src/fips.c (hmac256_check): New.
+ (check_binary_integrity): Use hmac256_check.
+
+ build: Generate hash for integrity check with hmac256 (2).
+ + commit 24aaded244a2b9427f2e90e4bf7adf086e0e0fef
+ * src/Makefile.am (libgcrypt.la.done): Use the rodata1 section.
+ * src/fips.c (_gcry_fips_run_selftests): Only enable
+ check_binary_integrity by ENABLE_HMAC_BINARY_CHECK.
+ [ENABLE_HMAC_BINARY_CHECK] (hmac_for_the_implementation): New.
+ [ENABLE_HMAC_BINARY_CHECK] (check_binary_integrity): Use
+ hmac_for_the_implementation in rodata.
+
+2021-08-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Generate hash for integrity check with hmac256.
+ + commit 3c89aad4a0d7f836fd747d4e2f0edfbf648ae318
+ * configure.ac [ENABLE_HMAC_BINARY_CHECK]: Check objcopy.
+ (USE_HMAC_BINARY_CHECK): New Automake conditional.
+
+ * src/Makefile.am (libgcrypt.la.done): New target.
+ [USE_HMAC_BINARY_CHECK] (libgcrypt.so.hmac): Compute the hash.
+ [USE_HMAC_BINARY_CHECK] (libgcrypt.la.done): Add .hmac section.
+
+ hmac: Fix hmac256 command option handling.
+ + commit 07c21dd7d134e6403c9ee4e09250ec577c9b2867
+ * src/hmac256.c (main): Fix use of --stdkey.
+
+ cipher: Fix the order of fields of gcry_md_context.
+ + commit cbbdc015bf522d4aff656ff0417b83144ab4bb2a
+ * cipher/md.c (struct gcry_md_context): Fix for better memory usage.
+
+2021-08-17 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Generating large-enough DSA keys works in FIPS mode.
+ + commit 6e40fca726357f13790065a27e2a0b333129fc54
+ The a93d678f previously added this condition, but the DSA key size
+ changed since then to 2k, which is still allowed.
+
+ * tests/pubkey.c (get_dsa_key_with_domain_new): DSA keys still work in
+ FIPS mode.
+
+ dsa: Drop dead code.
+ + commit 564e51fde71116757cdb6bc813aacf481bb826ed
+ * cipher/dsa.c (generate): This function is never called in FIPS mode
+
+ rsa: Do not allow 1024 RSA keys in FIPS mode.
+ + commit 034055ffdca28602a40c4d0b5997173e8597af18
+ Previously, the condition was in generate_std, which is never called in
+ FIPS mode.
+
+ * cipher/rsa.c (generate_std): Remove dead code as FIPS is using
+ 'generate_fips'
+ (generate_fips): Do not allow 1024 bit key generation
+
+ tests: Avoid confusing 'success' on error message.
+ + commit 588b8bb6ef091db299ff2eade295d3119b62283a
+ * tests/pubkey.c (get_dsa_key_with_domain_new): Remove bogus "success"
+ on error.
+
+2021-08-17 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Fix tests in fips mode and non-fips mode.
+ + commit 2ae56abd0eb60d755509d82155f52263bf2e37e8
+ * tests/t-secmem.c (test_secmem): Only tweak when FIPS enabled.
+
+2021-08-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Skip tests when FIPS for keygrip computations.
+ + commit 44c7c41af21c668826280abfee1257853020ba2d
+ * tests/keygrip.c (check): Skip non-FIPS curves when FIPS.
+ (main): Check if FIPS is enabled.
+
+ cipher: Raise an error for non-approved digests correctly.
+ + commit acc1598ea891180660d1a531823a1b5385e7f4e6
+ * cipher/md.c (md_enable): Remove check if it's enforced or not.
+
+ fips: Fix tests in fips mode.
+ + commit 347817438990b7adf22dc71e4fb581e3232f03a7
+ * src/global.c (_gcry_vcontrol): Don't check NO_SECURE_MEMORY for
+ GCRYCTL_FIPS_MODE_P.
+ * tests/t-secmem.c (test_secmem): Use smaller value.
+
+2021-08-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/bench-slope: allow non-FIPS ECC benchmarking in non-FIPS mode.
+ + commit a5982e35088a382b49c0e95e9a87365202267601
+ * tests/bench-slope.c (_ecc_bench): Check for 'in_fips_mode'.
+
+2021-08-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Fix check_binary_integrity.
+ + commit ca6797c5c5c61a0eae1f5aa82988d4870fe5edab
+ * src/fips.c: Define FIPS_FORCE_FILE macro earlier.
+ (check_binary_integrity): Use the address of gcry_check_version.
+ * src/visibility.h [FIPS_FORCE_FILE] (gcry_check_version): Allow
+ internal use of exported function.
+
+2021-08-05 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update checking headers.
+ + commit 538090d829483696de6342f2ea564b2e25d6a294
+ * configure.ac (AC_CHECK_HEADERS): Remove sys/msg.h.
+
+2021-08-03 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Fix values for DSA with larger key length.
+ + commit 8bf9ade071b80c1141d4a76d1b51b9a235b8b340
+ * tests/pubkey.c (get_dsa_key_with_domain_new): Update.
+
+ fips: Support LIBGCRYPT_FORCE_FIPS_MODE envvar.
+ + commit 7ac72ebaf7f723203c5fe9befa249e9bcc78ee92
+ * src/fips.c (_gcry_initialize_fips_mode): Check the
+ environment variable LIBGCRYPT_FORCE_FIPS_MODE.
+
+2021-07-29 Jakub Jelen <jjelen@redhat.com>
+
+ tests: Verify unsupported KDF tests fail in FIPS mode.
+ + commit 0ab4e8063729147fb9abd463055785aac831bf5c
+ * tests/t-kdf.c (check_pbkdf2): Verify tests based on algorithms
+ unsupported in FIPS mode fail.
+
+ cipher: Do not use of non-approved digests in FIPS mode.
+ + commit 0f118c2dfb8e1236893c30a9b86e7e231c8e5758
+ * cipher/md.c (md_enable): Block all non-approved digest algorithms, not
+ only the MD5 and do not drop from FIPS mode if not enforced.
+
+ tests: Generating DSA from domain should fail in FIPS mode.
+ + commit a93d678fa5a349600fabdce3fbe5919837cdc282
+ * tests/pubkey.c (get_dsa_key_with_domain_new): Expect failure in FIPS
+ mode
+ (check_x931_derived_key): Simplify testing for FIPS mode.
+ (main): Check for fips mode.
+
+ tests: Transient DSA keys work in FIPS mode.
+ + commit 83893f3f77da986951be98306a82238c97522bc1
+ * tests/pubkey.c (check_run): Enable tests with DSA transient keys which
+ work in FIPS.
+
+ tests: Skip secmem overflow test in FIPS mode.
+ + commit 6df523bfb095bf4c3d9dc6a0699fefcdfc6cd594
+ * tests/t-secmem.c (main): Skip overflow tests in FIPS mode because they
+ are fatal and there is no way to override the outofcore handler.
+
+ tests: Expect the 192b ECDSA tests to fail in fips mode.
+ + commit d2a26b30b5dbfa7b26a606e5b2fe5c238ab1afa1
+ * tests/dsa-rfc6979.c (check_dsa_rfc6979): Expect ECDSA 192b keys to
+ fail in FIPS mode.
+ (main): Detect FIPS mode.
+
+ tests: Expect curves 25519/448 to fail in FIPS mode.
+ + commit 3026148331523ec7ca81031339b5629431cafa23
+ * tests/t-cv25519.c (test_cv_hl): Expect the operation to fail in FIPS
+ mode.
+ (test_cv_x25519, test_it): Ditto.
+ (main) Detect FIPS mode.
+ * tests/t-ed25519.c (one_test): Expect the operation to fail in FIPS
+ mode.
+ (main) Detect FIPS mode.
+ * tests/t-ed448.c (one_test): Expect the operation to fail in FIPS
+ mode.
+ (main) Detect FIPS mode.
+ * tests/t-x448.c (test_cv_hl): Expect the operation to fail in FIPS
+ mode.
+ (test_cv_x448, test_cv): Ditto.
+ (main) Detect FIPS mode.
+
+ tests: Skip unsupported mechanisms in FIPS mode.
+ + commit 55dbac435c5ba31ef140f72ce997662e5f9fe55b
+ * tests/bench-slope.c (cipher_bench_one): Skip GCM mode in FIPS mode
+ (ecc_algo_fips_allowed): New function
+ (_ecc_bench): Skip algorithms disabled in FIPS mode
+ (main): Check for FIPS mode
+ * tests/benchmark.c (cipher_bench): Skip GCM in FIPS mode
+
+ tests: Do not expect GCM work in FIPS.
+ + commit f56a33df60dcce78c2b1aa5aeeee64549a26a0ce
+ * tests/basic.c (check_one_cipher_core): Expect GCM ciphers to fail in
+ FIPS mode
+ (check_cipher_modes): Skip GCM ciphers tests as they fail quite late
+ in gcry_cipher_gettag().
+
+ mac: Disable AES GMAC in FIPS mode.
+ + commit aa1e9ebf8bdbe6ed27c8667dbe4e1a69713210a5
+ * cipher/mac-gmac.c (_gcry_mac_type_spec_gmac_aes): Remove FIPS flag
+
+2021-07-29 NIIBE Yutaka <gniibe@fsij.org>
+
+ hwfeatures: Enable hardware support also in FIPS mode.
+ + commit 70e6cec07d86332f1aaf7a69bec75c7138306f6a
+ * src/hwfeatures.c (_gcry_detect_hw_features): Remove skipping in FIPS
+ mode.
+
+ cipher: Support internal hashing for DSA and ECDSA signing.
+ + commit 4a3e71403225bd60a96d6747a8141a268bedda78
+ * cipher/dsa-common.c (_gcry_dsa_compute_hash): New.
+ * cipher/pubkey-internal.h (_gcry_dsa_compute_hash): New.
+ * cipher/dsa.c (verify): Add FLAGS and HASHALGO.
+ (test_keys): Follow the change of verify API.
+ (sign, verify): Support PUBKEY_FLAG_PREHASH flag to hash internally.
+ (selftest_sign): Test with "prehash" flag.
+ * cipher/ecc-common.h (_gcry_ecc_ecdsa_verify): Add FLAGS and
+ HASHALGO.
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Support
+ PUBKEY_FLAG_PREHASH flag to hash internally.
+ (_gcry_ecc_ecdsa_verify): Likewise.
+ * cipher/ecc.c (test_keys): Follow the change of
+ _gcry_ecc_ecdsa_verify API.
+ (selftest_sign): Test with "prehash" flag.
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Support handling
+ of "hash-algo" and "value" with "prehash" flag.
+
+2021-07-23 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Support internal hashing for RSA-PSS.
+ + commit 877be1bf9df0b4e9aed9036db1592a64582a4bac
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Support
+ "hash-algo" with "value" for internal hashing with RSA-PSS.
+ * tests/basic.c (check_pubkey_sign): Add test cases.
+
+ cipher: Extend RSA-PSS internal function for verify, too.
+ + commit 285b4cb70df1553c60fb5da6c94e1106694d4f9e
+ * cipher/pubkey-internal.h (_gcry_rsa_pss_verify): Support internal
+ hashing.
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Use opaque MPI for
+ RSA-PSS.
+ * cipher/rsa-common.c (_gcry_rsa_pss_verify): Support internal
+ hashing.
+ * cipher/rsa.c (rsa_verify): Allow opaque MPI for RSA-PSS.
+
+ cipher: Extend RSA-PSS internal function.
+ + commit 51307b1ceaa752d5a737b06ab0217d310faea403
+ * cipher/pubkey-internal.h (_gcry_rsa_pss_encode): Change the API.
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Follow the change.
+ * cipher/rsa-common.c (_gcry_rsa_pss_encode): Support internal hashing.
+
+ cipher: Check by caller instead, not by callee for RSA-PSS.
+ + commit 652e115e10f2bd53d1e1fbe161c2528f4ca89012
+ * cipher/pubkey-internal.h (_gcry_rsa_pss_encode): Change the API.
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Before the call to
+ _gcry_rsa_pss_encode, check the condition here, raise GPG_ERR_INV_ARG
+ if it's not good.
+ * cipher/rsa-common.c (_gcry_rsa_pss_encode): No check inside.
+
+2021-07-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ hmac: Use xfree.
+ + commit db9f7abb7af7b5c5bc2ec356c614a5cdb88d75a6
+ * src/hmac256.c [STANDALONE] (xfree): Define.
+ (_gcry_hmac256_new, _gcry_hmac256_release): Use xfree.
+ (_gcry_hmac256_file): Likewise.
+
+2021-07-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/basic: use SHA256 instead of RMD160 for SHAKE extract testing.
+ + commit b98ca3f798abd17696f52163665204c4e83d9092
+ * tests/basic.c (check_one_md): Use GCRY_MD_SHA256 as 'crcalgo' for
+ SHAKE128/SHAKE256 testing.
+
+2021-07-07 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Fix tests/basic.c for FIPS mode.
+ + commit ccb076e8aabb9c49e7026258b3a36a8422f6bbe4
+ * tests/basic.c (main): Use bare gcry_control for
+ GCRYCTL_FORCE_FIPS_MODE.
+
+ tests: Skip unavailable ciphers in FIPS mode.
+ + commit 61c87070abc4baeb9d847db015e6a3031f349483
+ * tests/basic.c (_check_poly1305_cipher):
+ (check_ocb_cipher_largebuf_split): Skip unavailable ciphers when
+ IN_FIPS_MODE.
+ (check_ocb_cipher_checksum, check_gost28147_cipher_basic): Likewise.
+
+2021-07-07 NIIBE Yutaka <gniibe@fsij.org>
+ Jakub Jelen <jjelen@redhat.com>
+
+ tests: Fix messages to STDERR when FIPS mode is enabled.
+ + commit 297d31294333f39201ae6f387108300b311bedd1
+ * tests/basic.c (check_digests): Emit message when IN_FIPS_MODE.
+ (check_hmac, check_mac): Likewise.
+
+2021-07-05 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rinjdael-s390x: fix UBSAN warning on using index beyond end of array.
+ + commit 4b76fa6a1f924a56d2a8c323a9c2d95de763d0dc
+ * cipher/rijndael-s390x.c (aes_s390x_ocb_get_l): New.
+ (aes_s390x_ocb_enc, aes_s390x_ocb_dec, aes_s390x_ocb_auth): Use
+ 'aes_s390x_ocb_get_l'.
+
+2021-07-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ ec: add zSeries/s390x accelerated scalar multiplication.
+ + commit 69fdcb5433236c4fc5d24c1dcc269424a088086c
+ * cipher/asm-inline-s390x.h (PCC_FUNCTION_*): New.
+ (pcc_query, pcc_scalar_multiply): New.
+ * mpi/Makefile.am: Add 'ec-hw-s390x.c'.
+ * mpi/ec-hw-s390x.c: New.
+ * mpi/ec-internal.h (_gcry_s390x_ec_hw_mul_point)
+ (mpi_ec_hw_mul_point): New.
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Call 'mpi_ec_hw_mul_point'.
+ * src/g10lib.h (HWF_S390X_MSA_9): New.
+ * src/hwf-s390x.c (s390x_features): Add MSA9.
+ * src/hwfeatures.c (hwflist): Add 's390x-msa-9'.
+
+ tests/t-mpi-point: add one more NIST P-256 reduction test-vector.
+ + commit 3f4a59299134c6804c5d29fb3f275ea0e04ac8ac
+ * tests/t-mpi-point.c (check_ec_mul_reduction): Add second NIST P-256
+ test vector from T5510.
+
+2021-07-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ bench-slope: add X25519 and X448 scalar multiplication.
+ + commit 9911069388e762d2a85bc2a11ca6cfcc4c895e4f
+ * tests/bench-slope.c (ECC_ALGO_X25519, ECC_ALGO_X448): New.
+ (ecc_algo_name, ecc_algo_curve, ecc_nbits): Add X25519 and X448.
+ (bench_ecc_mult_do_bench): Pass Y as NULL to ec_get_affine with
+ X25519 and X448.
+ (cipher_ecc_one): Run only multiplication bench for X25519 and X448.
+
+ mpi: optimizations for MPI scanning and printing.
+ + commit 2fcac487069f9e40ff30366546624a8aff355b55
+ * mpi/mpicoder.c (mpi_read_from_buffer): Add word-size buffer
+ reading loop using 'buf_get_be(32|64)'.
+ (mpi_fromstr): Use look-up tables for HEX conversion; Add fast-path
+ loop for converting 8 hex-characters at once; Add string length
+ parameter.
+ (do_get_buffer): Use 'buf_put_be(32|64)' instead of byte writes; Add
+ fast-path for reversing buffer with 'buf_get_(be64|be32|le64|le32)'.
+ (_gcry_mpi_set_buffer): Use 'buf_get_be(32|64)' instead of byte reads.
+ (twocompl): Use _gcry_ctz instead of open-coded if-clauses to get
+ first bit set; Add fast-path for inverting buffer with
+ 'buf_get_(he64|he32)'.
+ (_gcry_mpi_scan): Use 'buf_get_be32' where possible; Provide string
+ length to 'mpi_fromstr'.
+ (_gcry_mpi_print): Use 'buf_put_be32' where possible; Use look-up
+ table for HEX conversion; Add fast-path loop for converting to
+ 8 hex-characters at once.
+ * tests/t-convert.c (check_formats): Add new tests for larger values.
+
+ mpi/ec: cache converted field_table MPIs.
+ + commit ef676b9c14da1c45db8f8538b740a8bbf603652d
+ * mpi/ec.c (field_table_mpis): New.
+ (ec_p_init): Cache converted field table MPIs.
+
+ mpi_ec_get_affine: fast path for Z==1 case.
+ + commit 38d80fdfddd027fe87bf5508e453d3e2cdbaa337
+ * mpi/ec.c (_gcry_mpi_ec_get_affine): Return X and Y as is
+ if Z is 1 (for Weierstrass and Edwards curves).
+
+ tests/t-mpi-point: add reduction test-vectors for secp256k1.
+ + commit 1652377763892213fa2cd53aa64884934b2c900f
+ * tests/t-mpi-point.c (check_ec_mul_reduction): Add secp256k1 test
+ vectors.
+
+2021-06-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ ec-nist: fix 'mod p' carry adjustment and output masking.
+ + commit fc92c609dfdbcf59a09ca3aaf53a1c1b8408c351
+ * mpi/ec-inline.h (MASK_AND64, LIMB_OR64): New.
+ [__x86_64__]: Use "rme" operand type instead of "g" to fix use
+ of large 32-bit constants.
+ * mpi/ec-nist.c (_gcry_mpi_ec_nist192_mod, _gcry_mpi_ec_nist224_mod)
+ (_gcry_mpi_ec_nist256_mod, _gcry_mpi_ec_nist384_mod): At end,
+ check if 's[]' is negative instead result of last addition, for
+ output masks; Use 'p_mult' table entry for P instead of 'ctx->p'.
+ (_gcry_mpi_ec_nist256_mod): Handle corner case were 2*P needs to be
+ added after carry based subtraction.
+ * tests/t-mpi-point.c (check_ec_mul_reduction): New.
+ (main): Call 'check_ec_mul_reduction'.
+
+2021-06-19 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ mpi/ec: add fast reduction for secp256k1.
+ + commit 6dfab8cfb94ccb485a15b13df3c499cbb06fddf2
+ * mpi/ec.c (ec_secp256k1_mod): New.
+ (field_table): Add 'secp256k1'.
+ * tests/t-mpi-point.c (check_ec_mul): Add secp256k1 test vectors.
+
+ mpi/ec: add fast reduction functions for NIST curves.
+ + commit 9d909cb67e70fd792926ac1e2ab305b2cc96bc27
+ * configure.ac (ASM_DISABLED): New.
+ * mpi/Makefile.am: Add 'ec-nist.c' and 'ec-inline.h'.
+ * mpi/ec-nist.c: New.
+ * mpi/ec-inline.h: New.
+ * mpi/ec-internal.h (_gcry_mpi_ec_nist192_mod)
+ (_gcry_mpi_ec_nist224_mod, _gcry_mpi_ec_nist256_mod)
+ (_gcry_mpi_ec_nist384_mod, _gcry_mpi_ec_nist521_mod): New.
+ * mpi/ec.c (ec_addm, ec_subm, ec_mulm, ec_mul2): Use
+ 'ctx->mod'.
+ (field_table): Add 'mod' function; Add NIST reduction
+ functions.
+ (ec_p_init): Setup ctx->mod; Setup function pointers
+ from field_table only if pointer is not NULL; Resize
+ ctx->a and ctx->b only if set.
+ * mpi/mpi-internal.h (RESIZE_AND_CLEAR_IF_NEEDED): New.
+ * mpi/mpiutil.c (_gcry_mpi_resize): Clear all unused
+ limbs also in realloc case.
+ * src/ec-context.h (mpi_ec_ctx_s): Add 'mod' function.
+
+ mpi/ec: small optimization for ec_mulm_448.
+ + commit ccfa9f2c1427b40483984198c3df41f8057f69f8
+ * mpi/ec.c (ec_addm_448, ec_subm_448): Change order of sub_n and
+ set_cond to remove need to clear 'n'.
+ (ec_mulm_448): Use memcpy where possible; Use mpih_rshift where
+ possible; Use mpih_lshift for doubling a3; Remove one addition
+ at end.
+
+ mpi/ec: small optimization for ec_mulm_25519.
+ + commit 9c12226c31d4fed4942c049724591a82c4428408
+ * mpi/ec.c (ec_addm_25519): Remove one addition.
+ (ec_subm_25519): Change order of add_n and set_cond to remove
+ need to clear 'n'.
+ (ec_mulm_25519): Avoid extra memory copies; Use _gcry_mpih_addmul_1
+ for multiplying by 19 and adding; Remove one addition at end.
+
+ mpi/longlong.h: fix missing macro parameter parentheses.
+ + commit 9722da5bfc4a519365f081b75319e96c4dd238f2
+ * mpi/longlong.h [__alpha] (umul_ppmm): Add parentheses around
+ used parameters.
+ [__i370__] (sdiv_qrnnd): Ditto.
+ [__mips__] (umul_ppmm): Ditto.
+ [__vax__] (sdiv_qrnnd): Ditto.
+
+ tests/t-mpi-point: add NIST curve multiplication test vectors.
+ + commit a0871a1e817f49e81b36b52e6b629f044bbd902e
+ * tests/t-mpi-point.c (mpi_base10_scan, check_ec_mul): New.
+ (main): Call 'check_ec_mul'.
+
+ tests/bench-slope: add ECC benchmarking.
+ + commit 57cf83834bc00a7431378aabda692bf700e4876c
+ * tests/bench-slope.c (bench_print_result_nsec_per_iteration): New.
+ (bench_print_header_nsec_per_iteration): New.
+ (kdf_bench_one, kdf_bench): Use new print helper functions.
+ [USE_ECC]: New ECC benchmarks.
+ (ecc_bench): New.
+ (print_help): Add 'ecc' option.
+ (main): Add ECC benchmarks.
+
+ tests/benchmark: add benchmark for Ed448.
+ + commit b53abf7905e05c39a2bdeffb77414458d2697d89
+ * tests/benchmark.c (ecc_bench): Add Ed448.
+
+2021-06-17 Werner Koch <wk@gnupg.org>
+
+ ecc: Fix bug in gcry_pk_get_param for Curve25519.
+ + commit 692e9b1935ed4ad9517077c1f87da41ddefb9937
+ * cipher/ecc-curves.c (_gcry_ecc_get_param_sexp): Simplify.
+
+ * cipher/pubkey.c (map_algo): Also map EDDSA to ECC.
+ * tests/curves.c (check_get_params): Add simple param lookup tests by
+ for all curves.
+
+2021-06-16 Johannes Schindelin via Gcrypt-devel <gcrypt-devel@gnupg.org>
+
+ build: Fix broken mlock detection.
+ + commit 66ff25ed4a8fd0c6897d8b18600be483c90ee436
+ * acinclude.m4 [GNUPG_CHECK_MLOCK]: Use size_t for the ptr test.
+
+2021-06-02 Werner Koch <wk@gnupg.org>
+
+ cipher: Extend convenience OID mapping table for AES.
+ + commit 585f153e1f741c1952c8e8c1a7f3a89a1e641572
+ * cipher/rijndael.c: Add OIDs for GCM and CCM.
+
+ Minor tweak to gcry_free.
+ + commit b6de4080a97385423b6a78fd400606d31093806f
+ * src/global.c (_gcry_free): Avoid setting errno again if it did not
+ change.
+
+2021-06-01 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Silence a warning for building rndjent by Clang.
+ + commit f6a4e22d86d2e2e03d164ec6515bb662eb762ef3
+ * random/jitterentropy-base.c: Conditionalize by __OPTIMIZE__.
+
+2021-05-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: _DARWIN_C_SOURCE should be 1.
+ + commit b9a14725ec13747dab1d96658b2f7ce09b1ec874
+ * configure.ac (*-apple-darwin*): Set _DARWIN_C_SOURCE 1.
+
+2021-05-26 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Fix ElGamal encryption for other implementations.
+ + commit 632d80ef30e13de6926d503aa697f92b5dbfbc5e
+ * cipher/elgamal.c (gen_k): Remove support of smaller K.
+ (do_encrypt): Never use smaller K.
+ (sign): Folllow the change of gen_k.
+
+2021-05-17 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ cipher: Fix memory leaks for EdDSA.
+ + commit 14bb6d4ea0dcb4db008057df93396d105d4a8672
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Initialize point Q when used.
+
+2021-05-17 H.J. Lu <hjl.tools@gmail.com>
+
+ Always include <config.h> in cipher assembly codes.
+ + commit a1f5d87ed49beaab2e4754532b84bd201ef3f68c
+ * cipher/poly1305-s390x.S: Always include <config.h>.
+
+2021-05-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix the input length check for Montgomery curve.
+ + commit 5f814e8a4968c01a7ffc7762bcaf3ce040594caf
+ * cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): Fix the condition.
+
+2021-04-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ hwf-x86: fix use of wrong operand type.
+ + commit ec87511d9cd2dc31434e939b6351d74a38d4ceaa
+ * src/hwf-x86.c (get_cpuid): Use xchg for swapping %ebx back
+ and forth between operand register.
+
+2021-04-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Check the input length for the point.
+ + commit 060c378c050e7ec6206358c681a313d6e1967dcf
+ * cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): Check the length
+ of valid point representation.
+
+2021-04-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ keccak: add hash_buffers functions for SHAKE128 & SHAKE256.
+ + commit e866c01e645d35475614d892665ac1c09513156d
+ * cipher/keccak.c (_gcry_shake128_hash_buffers)
+ (_gcry_shake256_hash_buffers): New.
+ (_gcry_digest_spec_shake128, _gcry_digest_spec_shake256): Add
+ hash_buffers pointer.
+
+ hash_buffers: add output length param for XOF support.
+ + commit eb96baf28473302b3d78187de92eb10093919f18
+ * src/cipher-proto.h (gcry_md_hash_buffers_t): Add nbytes parameter
+ for outbuf size for XOF algorithms.
+ * cipher/md.c (_gcry_md_hash_buffer)
+ (_gcry_md_hash_buffers_extract): Adjust for spec->hash_buffers
+ parameter change.
+ * cipher/keccak.c (_gcry_sha3_hash_buffers): Add nbytes parameter and
+ handling for XOF output.
+ * cipher/blake2.c (DEFINE_BLAKE2_VARIANT): Add nbytes parameter for
+ hash_buffers.
+ * cipher/rmd160.c (_gcry_rmd160_hash_buffers): Add nbytes parameter.
+ * cipher/sha1.c (_gcry_sha1_hash_buffers): Add nbytes parameter.
+ (_gcry_sha1_hash_buffer): Pass nbytes to _gcry_sha1_hash_buffers.
+ * cipher/sha256.c (_gcry_sha256_hash_buffers)
+ (_gcry_sha224_hash_buffers): Add nbytes parameter.
+ * cipher/sha512.c (_gcry_sha512_hash_buffers)
+ (_gcry_sha384_hash_buffers, _gcry_sha512_256_hash_buffers)
+ (_gcry_sha512_224_hash_buffers): Add nbytes parameter.
+ * cipher/sm3.c (_gcry_sm3_hash_buffers): Add nbytes parameter.
+
+ md: remove hash_buffer function from algorithms.
+ + commit 580ae61db5fe47b558135c2c794fd72c2680fa20
+ * cipher/md.c (_gcry_md_hash_buffer): Remove used of
+ 'spec->hash_buffer'.
+ * cipher/blake2.c (DEFINE_BLAKE2_VARIANT): Remove *_hash_buffer.
+ * cipher/crc.c: Remove spec hash_buffer NULL pointers.
+ * cipher/gostr3411-94.c: Remove spec hash_buffer NULL pointers.
+ * cipher/keccak.c (_gcry_sha3_hash_buffer
+ (_gcry_sha3_224_hash_buffer, _gcry_sha3_256_hash_buffer): Remove.
+ (_gcry_sha3_384_hash_buffer, _gcry_sha3_512_hash_buffer): Remove.
+ * cipher/md2.c: Remove spec hash_buffer NULL pointers.
+ * cipher/md4.c: Remove spec hash_buffer NULL pointers.
+ * cipher/md5.c: Remove spec hash_buffer NULL pointers.
+ * cipher/rmd160.c (_gcry_rmd160_hash_buffer): Remove.
+ * cipher/sha1.c (_gcry_sha1_hash_buffer): Rewrite using
+ _gcry_sha1_hash_buffers.
+ (_gcry_sha1_hash_buffers): Make static.
+ (_gcry_digest_spec_sha1): Remove hash_buffer pointer.
+ * cipher/sha256.c (_gcry_sha256_hash_buffer)
+ (_gcry_sha224_hash_buffer): Remove.
+ (_gcry_sha256_hash_buffers): Make static.
+ * cipher/sha512.c (_gcry_sha512_hash_buffer)
+ (_gcry_sha384_hash_buffer, _gcry_sha512_256_hash_buffer)
+ (_gcry_sha512_224_hash_buffer): Remove.
+ (_gcry_sha512_hash_buffers): Make static.
+ * cipher/sm3.c (_gcry_sm3_hash_buffer): Remove.
+ (_gcry_sm3_hash_buffers): Make static.
+ * cipher/stribog.c: Remove spec hash_buffer NULL pointers.
+ * cipher/tiger.c: Remove spec hash_buffer NULL pointers.
+ * cipher/whirlpool.c: Remove spec hash_buffer NULL pointers.
+ * src/cipher-proto.h (gcry_md_hash_buffer_t): Remove.
+ (gcry_md_spec_t): Remove 'hash_buffer'.
+ * src/cipher.h (_gcry_rmd160_hash_buffer, _gcry_sha1_hash_buffers)
+ (_gcry_sha256_hash_buffer, _gcry_sha256_hash_buffers)
+ (_gcry_sha512_hash_buffer, _gcry_sha512_hash_buffers)
+ (_gcry_sm3_hash_buffer, _gcry_sm3_hash_buffers): Remove.
+
+ Add XOF output support for internal _gcry_md_hash_buffers.
+ + commit f53d541d0947a894e6f09b4568658a859505a649
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_compute_h_d, _gcry_ecc_eddsa_sign)
+ (_gcry_ecc_eddsa_verify): Use same _gcry_md_hash_buffers_extract code
+ path for SHA512 and SHAKE256.
+ * cipher/md.c (_gcry_md_hash_buffers): Rename to ...
+ (_gcry_md_hash_buffers_extract): ... this; Add digestlen and handling
+ for XOF algorithms (SHAKE128, SHAKE256).
+ (_gcry_md_hash_buffers): New.
+ * src/gcrypt-int.h (_gcry_md_hash_buffers_extract): New.
+
+ Use memset for constant length wipememory2.
+ + commit 4770ad72607f73b9d529511c687556a6b4109875
+ * src/g10lib.h (fast_wipememory2_inline): New.
+ (wipememory2): Use 'fast_wipememory2_inline', remove 'fast_wipememory2'
+ use; Use _gcry_fast_wipememory* when _len or _set is not constant.
+ (fast_wipememory_s, fast_wipememory2): Remove.
+
+2021-04-19 Werner Koch <wk@gnupg.org>
+
+ Release 1.9.3.
+ + commit cb78627203705365d24b48ec4fc4cf2fc804b277
+
+
+2021-04-15 NIIBE Yutaka <gniibe@fsij.org>
+ Jakub Jelen <jjelen@redhat.com>
+
+ cipher: Fix memory leaks for EdDSA.
+ + commit a8d6c6c1b258548260748eefba0532fd35c8ce47
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Free the point Q.
+ (_gcry_ecc_eddsa_verify): Avoid memory leaks for points and MPIs.
+
+2021-04-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ api: Avoid use of C99 feature.
+ + commit 9c42db0b379c277ee976fcc696e84e31863a85a8
+ * src/gcrypt.h.in (enum gcry_md_algos): Remove last comma.
+
+ random: Fix for iOS.
+ + commit 0007f889bda884e40459ad86f13b6cd8b14c91df
+ * random/rndlinux.c [TARGET_OS_IPHONE]: Don't define HAVE_GETENTROPY.
+
+ cipher: Hardening ElGamal by introducing exponent blinding too.
+ + commit e8b7f10be275bcedb5fc05ed4837a89bfd605c61
+ * cipher/elgamal.c (do_encrypt): Also do exponent blinding.
+
+2021-04-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ mpi: harden add_n_cond, sub_n_cond and abs_cond against EM leakage.
+ + commit 9bc3d8de6e2a8cdef37c118f0a70376ed777eeee
+ * mpi/mpih-const-time.c (_gcry_mpih_add_n_cond)
+ (_gcry_mpih_sub_n_cond): Always perform calculation with both UP and
+ VP; Use two masks for selecting output.
+ (_gcry_mpih_abs_cond): Always calculate absolute value of UP; Use
+ two masks for selecting output.
+
+ mpi: harden set_cond functions against EM leakage.
+ + commit c7c25b6e6e6b52bbed26d8016145c404eb118f19
+ * mpi/mpih-const-time.c (_gcry_mpih_set_cond): Use two masks for
+ selecting output.
+ * mpi/mpiutil.c (_gcry_mpi_set_cond): Use two masks for selecting
+ output.
+
+ mpi: harden swap_cond functions against EM leakage.
+ + commit 1266f5bb02b7f76f2e4697ecfb85ef19c2ae04a9
+ * mpi/mpih-const-time.c (vzero, vone): New.
+ (_gcry_mpih_swap_cond): Use two masks for selecting output.
+ * mpi/mpiutil.c (vzero, vone): New.
+ (_gcry_mpi_swap_cond): Use to masks for selecting output.
+
+2021-04-02 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Return GPG_ERR_INV_KEYLEN when wrong key length.
+ + commit 840713de1a685920b6b1e1379902d545eccc74cf
+ * cipher/idea.c (do_setkey): Return GPG_ERR_INV_KEYLEN.
+ * cipher/rfc2268.c (setkey_core): Likewise.
+ * cipher/serpent.c (serpent_setkey_internal): Likewise.
+ (serpent_setkey): Likewise.
+
+2021-04-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cipher-gcm-ppc: add big-endian support.
+ + commit aaa30381eac3cdb49a21e279b2d89ef6e695a138
+ * cipher/cipher-gcm-ppc.c (ALIGNED_16): New.
+ (vec_store_he, vec_load_he): Remove WORDS_BIGENDIAN ifdef.
+ (vec_dup_byte_elem): New.
+ (_gcry_ghash_setup_ppc_vpmsum): Match function declaration with
+ prototype in cipher-gcm.c; Load C2 with VEC_LOAD_BE; Use
+ vec_dup_byte_elem; Align constants to 16 bytes.
+ (_gcry_ghash_ppc_vpmsum): Match function declaration with
+ prototype in cipher-gcm.c; Align constant to 16 bytes.
+ * cipher/cipher-gcm.c (ghash_ppc_vpmsum): Return value from
+ _gcry_ghash_ppc_vpmsum.
+ * cipher/cipher-internal.h (GCM_USE_PPC_VPMSUM): Remove requirement
+ for !WORDS_BIGENDIAN.
+
+ mpi/aarch64: use C_SYMBOL_NAME for assembly function names.
+ + commit 1cf5a568f2b2f2c3d83c154cdcf5a40aa1f83c50
+ * mpi/aarch64/mpih-add1.S: Add missing C_SYMBOL_NAME.
+ * mpi/aarch64/mpih-mul1.S: Add missing C_SYMBOL_NAME.
+ * mpi/aarch64/mpih-mul2.S: Add missing C_SYMBOL_NAME.
+ * mpi/aarch64/mpih-mul3.S: Add missing C_SYMBOL_NAME.
+ * mpi/aarch64/mpih-sub1.S: Add missing C_SYMBOL_NAME.
+
+2021-03-31 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update gpg-error.m4.
+ + commit d2b3d046fc66a3166dc0c003a430ce756532ff74
+ * m4/gpg-error.m4: Update from libgpg-error.
+
+2021-03-30 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix for make distcheck, no EPS support.
+ + commit 35917373d64521d9c0d33b5fa9b60abd28964dd4
+ * Makefile.am (AM_DISTCHECK_DVI_TARGET): Specify 'pdf'.
+ * doc/Makefile.am (EXTRA_DIST, BUILT_SOURCES): Remove .eps files.
+
+ ecc: Fix the regression of gcry_mpi_ec_add.
+ + commit 45e88b8ec6dfbd8f981ca89ded80ef48eca6f0e9
+ * mpi/ec.c (_gcry_mpi_ec_point_resize): Export the routine
+ for internal use.
+ (add_points_edwards, _gcry_mpi_ec_mul_point): Use mpi_point_resize.
+ * src/gcrypt-int.h (_gcry_mpi_ec_point_resize): Declare.
+
+ * src/visibility.c (gcry_mpi_ec_dup, gcry_mpi_ec_add): Make sure for
+ the size of limb before calling the internal functions.
+ (gcry_mpi_ec_sub): Likewise.
+
+2021-03-25 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-s390x: fix checksum calculation in OCB decryption.
+ + commit 68bb0ddc5504c9c0f3f52259a4085bb2fc1a02ad
+ * cipher/rijndael-s390x.c (aes_s390x_ocb_dec): Calculate checksum
+ after decryption instead of inlining.
+
+ tests/basic: OCB large buffer check: make input buffer non-repeatable.
+ + commit 21c273cecfd58408b8d3287f5bc8c246c3010313
+ * tests/basic.c (check_ocb_cipher_largebuf_split): Use SHA1 to
+ initialize input buffer.
+ (check_ocb_cipher): Update largebuf test vectors.
+
+ tests/basic: add decryption check to check_ocb_cipher_checksum.
+ + commit 56da81ac47209dc41af08a129f5e0c15538261b2
+ * tests/basic.c (check_ocb_cipher_checksum): Add decryption.
+
+2021-03-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Remove intermediate PDF files from EXTRA_DIST.
+ + commit 52f6e95159885431f3c7e9f64290d0132ca547ef
+ * doc/Makefile.am (EXTRA_DIST): Remove PDF files.
+ (BUILT_SOURCES): Likewise.
+
+2021-03-24 Werner Koch <wk@gnupg.org>
+
+ ecc: Fix keygrip computation for compressed points.
+ + commit c8c38757c428871af980a548bc38f38e5d9238d1
+ * cipher/ecc-misc.c (_gcry_ecc_ec2os): Factor most code out to ...
+ (_gcry_ecc_ec2os_buf): new.
+ * cipher/ecc.c (compute_keygrip): Handle compressed keys.
+ * tests/keygrip.c: Add new tests.
+
+2021-03-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Compile arch specific GCM implementations only on target arch.
+ + commit 43302b960f546fd60ed7fefb2b0404ee69491e93
+ * cipher/Makefile.am: Move arch specific 'cipher-gcm-*.[cS]' files
+ from libcipher_la_SOURCES to EXTRA_libcipher_la_SOURCES.
+ * configure.ac: Add 'cipher-gcm-intel-pclmul.lo' and
+ 'cipher-gcm-arm*.lo'.
+
+ configure.ac: fix digest implementations going to cipher list.
+ + commit 8892510bb8f45438144a7449440fcb32ae4c5f7b
+ * configure.ac: Add 'crc-arm*.lo', 'crc-ppc.lo', 'sha*-ppc.lo' to
+ GCRYPT_DIGESTS instead of GCRYPT_CIPHERS.
+
+ cipher-gcm-ppc: tweak for better performance.
+ + commit 760ef8baee06db5ce4da55eb5648e605aa511d2d
+ * cipher/cipher-gcm-ppc.c (asm_xor, asm_mergelo, asm_mergehi)
+ (vec_be_swap, vec_load_he, vec_store_he): New.
+ (vec_load_be, vec_perm2, vec_aligned_st, vec_aligned_ld): Remove.
+ (asm_vpmsumd, asm_swap_u64, vec_perm2, asm_rot_block_left)
+ (asm_rot_block_right, asm_ashl_128, vec_aligned_ld)
+ (_gcry_ghash_setup_ppc_vpmsum): Update 'bswap_const'.
+ (_gcry_ghash_ppc_vpmsum): Update 'bswap_const'; Use 'asm_mergehi'
+ and 'asm_mergelo' instead of vec_perm2; Use 'asm_xor' for
+ fast path to enforce instruction ordering; Use 'vec_load_he' and
+ 'vec_be_swap' for big-endian loads.
+
+2021-03-07 Shawn Landden <shawn@git.icu>
+
+ VPMSUMD acceleration for GCM mode on PPC.
+ + commit 440332532a1c107e2baeafda5464e0707f634be1
+ * cipher/Makefile.am: Add 'cipher-gcm-ppc.c'.
+ * cipher/cipher-gcm-ppc.c: New.
+ * cipher/cipher-gcm.c [GCM_USE_PPC_VPMSUM] (_gcry_ghash_setup_ppc_vpmsum)
+ (_gcry_ghash_ppc_vpmsum, ghash_setup_ppc_vpsum, ghash_ppc_vpmsum): New.
+ (setupM) [GCM_USE_PPC_VPMSUM]: Select ppc-vpmsum implementation if
+ HW feature "ppc-vcrypto" is available.
+ * cipher/cipher-internal.h (GCM_USE_PPC_VPMSUM): New.
+ (gcry_cipher_handle): Move 'ghash_fn' at end of 'gcm' block to align
+ 'gcm_table' to 16 bytes.
+ * configure.ac: Add 'cipher-gcm-ppc.lo'.
+ * tests/basic.c (_check_gcm_cipher): New AES256 test vector.
+ * AUTHORS: Add 'CRYPTOGAMS'.
+ * LICENSES: Add original license to 3-clause-BSD section.
+
+2021-03-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ src/hwfeatures: add reminder about documenting new HW features.
+ + commit 7c4c992fe96f781e387bd26a11b17e70a27aa3c0
+ * src/hwfeatures.c (hwflist): Add comment about updating
+ 'doc/gcrypt.texi' with new HW features.
+
+2021-03-06 Jakub Jelen <jjelen@redhat.com>
+
+ doc: Document newly added optimizations.
+ + commit 49ab649c69951cd7b6d40d3527e21db51d93a207
+ * doc/gcrypt.texi: Add HW features 'intel-vaes-vpclmul', 'ppc-vcrypto',
+ 'ppc-arch_3_00', 'ppc-arch_2_07', 's390x-msa', 's390x-msa-4',
+ 's390x-msa-8' and 's390x-vx'.
+
+2021-03-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ poly1305: make --disable-asm work on x86, aarch64 and ppc.
+ + commit 2b84da922660918129c610f4d27cb5c510ab0489
+ * cipher/poly1305.c [__aarch64__] (ADD_1305_64): Check for
+ HAVE_CPU_ARCH_ARM.
+ [__x86_64__] (ADD_1305_64): Check for HAVE_CPU_ARCH_X86.
+ [__powerpc__] (ADD_1305_64): Check for HAVE_CPU_ARCH_PPC.
+ [__i386__] (ADD_1305_32): Check for HAVE_CPU_ARCH_X86.
+
+ poly1305: fix compiling on i386 gcc-4.7.
+ + commit bcb180190e8921356c039b0475fd71f2c45d986d
+ * cipher/poly1305.c [__i386__]: Limit i386 variant of ADD_1305_32 to
+ GCC-5 or newer.
+
+ cipher-gcm-intel-pclmul: fix compiling with i386 gcc-4.7.
+ + commit d1fcf3975c57c5312890199832100c8c363d5b18
+ * cipher/cipher-gcm-intel-pclmul.c (gcm_lsh): Pass '*pconst' instead of
+ 'pconst' to asm block.
+
+2021-02-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: add x86_64 VAES/AVX2 accelerated implementation.
+ + commit e72498a54fdead503fb0c1c93e2b747cd91e7681
+ * cipher/Makefile.am: Add 'rijndael-vaes.c' and
+ 'rijndael-vaes-avx2-amd64.S'.
+ * cipher/rijndael-internal.h (USE_VAES): New.
+ * cipher/rijndael-vaes-avx2-amd64.S: New.
+ * cipher/rijndael-vaes.c: New.
+ * cipher/rijndael.c (_gcry_aes_vaes_cfb_dec, _gcry_aes_vaes_cbc_dec)
+ (_gcry_aes_vaes_ctr_enc, _gcry_aes_vaes_ocb_crypt)
+ (_gcry_aes_vaes_xts_crypt): New.
+ (do_setkey) [USE_VAES]: Add detection for VAES.
+ (selftest_ctr_128, selftest_cbc_128, selftest_cfb_128)
+ [USE_VAES]: Increase number of selftest blocks.
+ * configure.ac: Add 'rijndael-vaes.lo' and
+ 'rijndael-vaes-avx2-amd64.lo'.
+
+ rijndael-aesni: add 8-block parallel code path for XTS.
+ + commit ffe1d53197031eeb65601c5aeafe55e78079a75e
+ * cipher/rijndael-aesni.c (xts_gfmul_const): Fix array size from 16
+ to 2.
+ (_gcry_aes_aesni_xts_enc, _gcry_aes_aesni_xts_dec) [__x86_64__]: Add
+ 8-block parallel code paths.
+
+ camellia: add x86_64 VAES/AVX2 accelerated implementation.
+ + commit 0e7e60241a0d054eae7a98116636a831ec6ccc97
+ * cipher/Makefile.am: Add 'camellia-aesni-avx2-amd64.h' and
+ 'camellia-vaes-avx2-amd64.S'.
+ * cipher/camellia-aesni-avx2-amd64.S: New, old content moved to...
+ * cipher/camellia-aesni-avx2-amd64.h: ...here.
+ (IF_AESNI, IF_VAES, FUNC_NAME): New.
+ * cipher/camellia-vaes-avx2-amd64.S: New.
+ * cipher/camellia-glue.c (USE_VAES_AVX2): New.
+ (CAMELLIA_context): New member 'use_vaes_avx2'.
+ (_gcry_camellia_vaes_avx2_ctr_enc, _gcry_camellia_vaes_avx2_cbc_dec)
+ (_gcry_camellia_vaes_avx2_cfb_dec, _gcry_camellia_vaes_avx2_ocb_enc)
+ (_gcry_camellia_vaes_avx2_ocb_dec)
+ (_gcry_camellia_vaes_avx2_ocb_auth): New.
+ (camellia_setkey): Check for HWF_INTEL_VAES.
+ (_gcry_camellia_ctr_enc, _gcry_camellia_cbc_dec)
+ (_gcry_camellia_cfb_dec, _gcry_camellia_ocb_crypt)
+ (_gcry_camellia_ocb_auth): Add USE_VAES_AVX2 code.
+ * configure.ac: Add 'camellia-vaes-avx2-amd64.lo'.
+
+ hwf-x86: add "intel-vaes-vpclmul" HW feature.
+ + commit eb404d8904532f6dca82421c952be286a1f4e11c
+ * configure.ac (HAVE_GCC_INLINE_ASM_VAES_VPCLMUL): New.
+ * src/g10lib.h (HWF_INTEL_VAES_VPCLMUL): New.
+ * src/hwf-x86.c (detect_x86_gnuc): Check for VAES and VPCLMUL.
+ * src/hwfeatures.c (hwflist): Add "intel-vaes-vpclmul".
+
+2021-02-17 Werner Koch <wk@gnupg.org>
+
+ Release 1.9.2.
+ + commit 24bd7e8215f7982b0c8db46fd87b47b370a52ec6
+
+
+2021-02-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update gpg-error.m4.
+ + commit 8e3cd4c4677c3b10ac6265a1b31f84c63c95cac4
+ * m4/gpg-error.m4: Update from libgpg-error.
+
+2021-02-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Fix build for macOS.
+ + commit d78cdf42854b17e2216890e7b78f9e7e05c0b1f8
+ * random/rndlinux.c [__APPLE__] (HAVE_GETENTROPY): Valid only when the
+ macro __MAC_10_11 is available.
+
+2021-02-08 Werner Koch <wk@gnupg.org>
+
+ tests: Fix minor glitches.
+ + commit 82395f11b444651f544f5e51c62fc6b65c04f9ef
+ * tests/basic.c (ALWAYS_INLINE): Make sure it is defined.
+ * tests/version.c (main): Print the config info to stdout.
+
+ New test Makefile target xtestsuite.
+ + commit ebc4d5670a1ada54ad907a4836eb8f6f573c2c38
+ * tests/Makefile.am (xtestsuite, xcheck): New targets.
+
+ New test driver to allow for standalone regression tests.
+ + commit b142da4c88deef4798ef96061dac399df3ddd73d
+ * tests/testdrv.c: New.
+
+2021-02-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ sha256-avx2: fix reading beyond end of input buffer.
+ + commit 24af2a55d862d45fe3aef6b5626a52d9bb0fb17e
+ * cipher/sha256-avx2-bmi2-amd64.S
+ (_gcry_sha256_transform_amd64_avx2): Use 'last block' code path if
+ input length is only one block.
+ * tests/basic.c (check_one_md_final): Use dynamic allocated buffer
+ so that in future similar access errors get detected by
+ tests/basic + valgrind.
+
+ ecc-ecdh: fix memory leak.
+ + commit 289543544e41cd5fe90352c5c7548ac09da533cc
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Free 'ec' at function exit.
+
+ tests: allow running 'make check' with ASAN.
+ + commit f46a6bd9b3d7ef7d1a72c5b6da5cf34ace2ff156
+ * tests/t-secmem.c (main): Skip test if environment variable
+ GCRYPT_IN_ASAN_TEST is defined.
+ * tests/t-sexp.c (main): Do not initialize secmem if environment
+ variable GCRYPT_IN_ASAN_TEST is defined.
+
+ global: make sure that bulk config string is null-terminated.
+ + commit 8716e4b2ada21456802aee67c2bc8edfec78f820
+ * src/global.c (_gcry_get_config): Append null-terminator to output
+ in the 'what == NULL' case.
+
+ Add handling for -Og with O-flag munging.
+ + commit a71b7de32b0c7c41359335a488cfe4dd70c65121
+ * cipher/Makefile.am (o_flag_munging): Add handling for '-Og'.
+ * random/Makefile.am (o_flag_munging): Add handling for '-Og'.
+
+ jent: silence ubsan warning about signed overflow.
+ + commit 6fc11291282a668839040c72a1d558a6ebbd4972
+ * random/jitterentropy-base.c (jent_stuck): Cast 'delta2' values to
+ 'uint64_t' for calculation.
+
+ Fix ubsan warnings for i386 build.
+ + commit 364e9e9d10503b36f98fbb1b489e00026f22c9d7
+ * mpi/mpicoder.c (_gcry_mpi_set_buffer) [BYTES_PER_MPI_LIMB == 4]: Cast
+ "*p--" values to mpi_limb_t before left shifting.
+ * tests/t-lock.c (main): Cast 'time(NULL)' to unsigned type.
+
+ Fix building with --disable-asm on x86.
+ + commit af23ab5c5482d625ff52e60606cf044e2b0106c8
+ * cipher/keccak.c (USE_64BIT_BMI2, USE_64BIT_SHLD)
+ (USE_32BIT_BMI2): Depend also on HAVE_CPU_ARCH_X86.
+ * random/rndjent.c [__i386__ || __x86_64__] (USE_JENT): Depend
+ also on HAVE_CPU_ARCH_X86.
+
+ md: clear bctx.count at final function.
+ + commit cb95fc53003e9f34ff80fc33627ceda605de223c
+ * cipher/md4.c (md4_final): Set bctx.count zero after
+ finalizing.
+ * cipher/md5.c (md5_final): Ditto.
+ * cipher/rmd160.c (rmd160_final): Ditto.
+ * cipher/sha1.c (sha1_final): Ditto.
+ * cipher/sha256.c (sha256_final): Ditto.
+ * cipher/sha512.c (sha512_final): Ditto.
+ * cipher/sm3.c (sm3_final): Ditto.
+ * cipher/stribog.c (stribog_final): Ditto.
+ * cipher/tiger.c (tiger_final): Ditto.
+
+2021-02-02 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Add checking key for ECDSA.
+ + commit 598d0f3e0294a487e01b88cc714a8cd0a47329bb
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_verify): Validate public key.
+ * cipher/ecc-gost.c (_gcry_ecc_gost_verify): Likewise.
+ * cipher/ecc-sm2.c (_gcry_ecc_sm2_verify): Likewise.
+
+2021-01-29 Werner Koch <wk@gnupg.org>
+
+ Release 1.9.1.
+ + commit 466299b1ceb82ec7c4dd0ca376de50399a896adf
+ * configure.ac: Bump LT version to C23/A3/R1.
+
+2021-01-29 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ hash-common: fix heap overflow when writing more data after final.
+ + commit 512c0c75276949f13b6373b5c04f7065af750b08
+ * tests/basic.c (check_one_md): Test writing to digest after read.
+ * cipher/hash-common.c (_gcry_md_block_write): Reset 'hd->count' if
+ greater than blocksize.
+
+2021-01-28 Werner Koch <wk@gnupg.org>
+
+ Add a compliance keyword to gcry_get_config.
+ + commit aa3f595341eb263980210776c7fe377b2ed24c5e
+ * src/global.c (print_config): New config line.
+
+2021-01-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ asm-common-aarch64: add MacOS support for GET_DATA_POINTER.
+ + commit 014fed5153647641376b9131ea1d87dc5e88cf42
+ * cipher/asm-common-aarch64.h [__APPLE__] (GET_DATA_POINTER): Add MacOS
+ variant of macro.
+
+2021-01-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Use getentropy on macOS when available.
+ + commit 6cb0faf6ceec5b2e799e6fb5f04b85d135a7da9b
+ * random/rndlinux.c [__APPLE__ && __MACH__] (getentropy): Declare.
+ (_gcry_rndlinux_gather_random): Check the symbol and use getentropy.
+
+ mpi: Fix _gcry_mpih_mod implementation.
+ + commit f06ff4e31c8e162f4a59986241c7ab43d5085927
+ * mpi/mpih-const-time.c (_gcry_mpih_mod): Handle the overflow.
+
+ build: Check spawn.h for MacOS X Tiger.
+ + commit fc901e978a0c18a3524cad5d1ef3451ed11b9347
+ * configure.ac: Add check for spawn.h.
+ * tests/random.c: Only use posix_spawn if available.
+
+2021-01-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ global: fix compile error at pragma GCC diagnostic.
+ + commit 3d095206c30d772d5fc68bf69bfc384e43f766e9
+ * src/global.c (_gcry_vcontrol): Move "pragma GCC diagnostics" outside
+ function.
+
+ cipher-proto: remove forward typedef of cipher_bulk_ops_t.
+ + commit 17aad639d29c7c835a7effb89181c7c99b16cb6a
+ * cipher/cipher-proto (cipher_bulk_ops_t): Remove typedef, leave
+ forward declaration of 'struct cipher_bulk_ops'.
+ (gcry_cipher_setkey_t): Change 'bulk_ops' to
+ 'struct cipher_bulk_ops *'.
+ * cipher/arcfour.c: Include 'cipher-internal.h'.
+ * cipher/gost28147.c: Ditto.
+ * cipher/idea.c: Ditto.
+ * cipher/rfc2268.c: Ditto.
+ * cipher/salsa20.c: Ditto.
+ * cipher/seed.c: Ditto.
+ * cipher/mac-internal.h (CTX_MAGIC_NORMAL): Rename to...
+ (CTX_MAC_MAGIC_NORMAL): ... this.
+ (CTX_MAGIC_SECURE): Rename to...
+ (CTX_MAC_MAGIC_SECURE): ... this.
+ * cipher/mac-cmac.c (cmac_open): Use CTX_MAC_MAGIC_SECURE.
+ * cipher/mac-gmac.c (gmac_open): Ditto.
+ * cipher/mac-hmac.c (hmac_open): Ditto.
+ * cipher/mac-poly1305.c (poly1305mac_open): Ditto.
+ * cipher/mac.c (mac_open): Use CTX_MAC_MAGIC_SECURE and
+ CTX_MAC_MAGIC_NORMAL.
+
+2021-01-26 David Michael <fedora.dm0@gmail.com>
+
+ cipher/sha512: Fix non-NEON ARM assembly implementation.
+ + commit 1e72c50f864ae1c77ba80c191224b9ef1d22a2e2
+ * cipher/sha512.c (do_transform_generic)
+ [USE_ARM_ASM]: Switch to the non-NEON assembly implementation.
+
+2021-01-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ blake2: fix RIP register access for AVX/AVX2 implementations.
+ + commit b2f78ae034b8d4aa3d4cc7bf85262317832f6e0a
+ * cipher/blake2b-amd64-avx2.S: Use rRIP instead of (RIP).
+ * cipher/blake2s-amd64-avx.S: Use rRIP instead of (RIP).
+
+ sha512/sha256: remove assembler macros from AMD64 implementations.
+ + commit 9f49e806f9506533236fd44b17f17b85961b20f1
+ * configure.ac (gcry_cv_gcc_platform_as_ok_for_intel_syntax): Remove
+ assembler macro check from Intel syntax assembly support check.
+ * cipher/sha256-avx-amd64.S: Replace assembler macros with C
+ preprocessor counterparts.
+ * cipher/sha256-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha256-ssse3-amd64.S: Ditto.
+ * cipher/sha512-avx-amd64.S: Ditto.
+ * cipher/sha512-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha512-ssse3-amd64.S: Ditto.
+
+ configure.ac: run assembler checks through linker for better LTO support
+ + commit 393bd6c3d1aa2b2a1b05be0e2d7fb2514e6c5ad0
+ * configure.ac (gcry_cv_gcc_arm_platform_as_ok)
+ (gcry_cv_gcc_aarch64_platform_as_ok)
+ (gcry_cv_gcc_inline_asm_ssse3, gcry_cv_gcc_inline_asm_pclmul)
+ (gcry_cv_gcc_inline_asm_shaext, gcry_cv_gcc_inline_asm_sse41)
+ (gcry_cv_gcc_inline_asm_avx, gcry_cv_gcc_inline_asm_avx2)
+ (gcry_cv_gcc_inline_asm_bmi2, gcry_cv_gcc_as_const_division_ok)
+ (gcry_cv_gcc_as_const_division_with_wadivide_ok)
+ (gcry_cv_gcc_amd64_platform_as_ok, gcry_cv_gcc_win64_platform_as_ok)
+ (gcry_cv_gcc_platform_as_ok_for_intel_syntax)
+ (gcry_cv_gcc_inline_asm_neon, gcry_cv_gcc_inline_asm_aarch32_crypto)
+ (gcry_cv_gcc_inline_asm_aarch64_neon)
+ (gcry_cv_gcc_inline_asm_aarch64_crypto)
+ (gcry_cv_gcc_inline_asm_ppc_altivec)
+ (gcry_cv_gcc_inline_asm_ppc_arch_3_00)
+ (gcry_cv_gcc_inline_asm_s390x, gcry_cv_gcc_inline_asm_s390x): Use
+ AC_LINK_IFELSE check instead of AC_COMPILE_IFELSE.
+
+ rijndael: remove unused use_xxx flags.
+ + commit a14447f8169aff30a49f5c2ab06bd5bbd1cc3531
+ * cipher/rijndael-internal.h (RIJNDAEL_context_s): Remove unused
+ 'use_padlock', 'use_aesni', 'use_ssse3', 'use_arm_ce', 'use_ppc_crypto'
+ and 'use_ppc9le_crypto'.
+ * cipher/rijndael.c (do_setkey): Do not setup 'use_padlock',
+ 'use_aesni', 'use_ssse3', 'use_arm_ce', 'use_ppc_crypto' and
+ 'use_ppc9le_crypto'.
+
+ Define HW-feature flags per architecture.
+ + commit 8d404a629167d67ed56e45de3e65d1e0b7cdeb24
+ * random/rand-internal.h (_gcry_rndhw_poll_slow): Add requested length
+ parameter.
+ * random/rndhw.c (_gcry_rndhw_poll_slow): Limit accounted bytes to 50%
+ (or 25% for RDRAND) - this code is moved from caller side.
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Move
+ HWF_INTEL_RDRAND check to _gcry_rndhw_poll_slow.
+ * src/g10lib.h (HWF_PADLOCK_*, HWF_INTEL_*): Define only if
+ HAVE_CPU_ARCH_X86.
+ (HWF_ARM_*): Define only if HAVE_CPU_ARCH_ARM.
+ (HWF_PPC_*): Define only if HAVE_CPU_ARCH_PPC.
+ (HWF_S390X_*): Define only if HAVE_CPU_ARCH_S390X.
+
+ Add configure option to force enable 'soft' HW feature bits.
+ + commit 3b34bd6e178614d6021ee7d1140646f7c8ed7519
+ * configure.ac (force_soft_hwfeatures)
+ (ENABLE_FORCE_SOFT_HWFEATURES): New.
+ * src/hwf-x86.c (detect_x86_gnuc): Enable HWF_INTEL_FAST_SHLD
+ and HWF_INTEL_FAST_VPGATHER if ENABLE_FORCE_SOFT_HWFEATURES enabled.
+
+2021-01-26 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix Ed25519 private key handling for preceding ZEROs.
+ + commit 1b74f633bd3e358fb07a856a70597019980651d2
+ * cipher/ecc-curves.c (mpi_ec_setup_elliptic_curve): Fill-up or remove
+ preceding ZEROs correctly, fixing the third argument of mpi_set_opaque.
+
+ ecc: Fix initialization of CTX for sign and verify.
+ + commit 652b102697cbfe2d7bc642fc7374cb21a9cf03e6
+ * cipher/ecc.c (ecc_sign, ecc_verify): Call
+ _gcry_pk_util_init_encoding_ctx at first.
+
+2021-01-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix build of tests with non-default installation.
+ + commit fa3420b011c105ca21894489e62c7e882a3ac4dd
+ * tests/Makefile.am: Add forgotten @LDADD_FOR_TESTS_KLUDGE@.
+
+2021-01-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Split inline assembly blocks with many memory operands.
+ + commit 00df9f27181d77166ceb55f319329400bf2e6a48
+ * cipher/rijndael-aesni.c (aesni_ocb_checksum, aesni_ocb_enc)
+ (aesni_ocb_dec, _gcry_aes_aesni_ocb_auth): Split assembly blocks
+ with more than 4 memory operands to smaller blocks.
+ * cipher/sha512-ssse3-i386.c (W2): Split big assembly block to
+ three smaller blocks.
+
+ tests/basic: fix build on ARM32 when NEON disabled.
+ + commit 81354e911bfa3e135d3e07f6a8d9e98033cd921a
+ * tests/basic.c (CLUTTER_VECTOR_REGISTER_NEON)
+ (CLUTTER_VECTOR_REGISTER_AARCH64): Remove check for __ARM_FEATURE_SIMD32.
+
+ kdf: make self-test test-vector array read-only.
+ + commit 097148bc89ec8c18b9e4795733e0f0b1ae0ecd1d
+ * cipher/kdf.c (selftest_pbkdf2): Make 'tv[]' constant.
+
+ kdf: add missing null-terminator for self-test test-vector array.
+ + commit c6425a5537294dfe2beaafc9105f7af4ceac677f
+ * cipher/kdf.c (selftest_pbkdf2): Add null-terminator to TV array.
+
+ cipher/bithelp: use __builtin_ctzl when available.
+ + commit 807827cda3bacf5f475167ee6d34657713111838
+ * cipher/bithelp.h (_gcry_ctz64): Use __builtin_ctzl if available.
+
+ mpi/longlong: make use of compiler provided __builtin_ctz/__builtin_clz.
+ + commit 477355047e5c75ad2b2238a8716e4646b861184c
+ * configure.ac (gcry_cv_have_builtin_ctzl, gcry_cv_have_builtin_clz)
+ (gcry_cv_have_builtin_clzl): New checks.
+ * mpi/longlong.h (count_leading_zeros, count_trailing_zeros): Use
+ __buildin_clz[l]/__builtin_ctz[l] if available and bit counting
+ macros not yet provided by inline assembly.
+
+2021-01-19 Werner Koch <wk@gnupg.org>
+
+ Release 1.9.0.
+ + commit 0dc49af9b5371c5e2f766b70c3bede2b10db9f7e
+
+
+2021-01-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix DSA for FIPS 186-3.
+ + commit 30ed9593f632c728d918598037358deaeccd1968
+ * cipher/dsa.c (generate_fips186): Supply INITIAL_SEED to
+ _gcry_generate_fips186_3_prime.
+ * tests/fips186-dsa.c (check_dsa_gen_186_2): Add where tv comes from.
+ (check_dsa_gen_186_3): Implement tests.
+ * tests/pubkey.c (get_dsa_key_fips186_with_seed_new): Use the qbits
+ and seed of tests/fips186-dsa.c.
+
+2021-01-19 NIIBE Yutaka <gniibe@fsij.org>
+ Tomáš Mráz <tm@t8m.info>
+
+ Check if FIPS is operational and error return if not.
+ + commit ebeae53222648c637907f4b358888fc0e7123dc9
+ * src/visibility.c (gcry_kdf_derive): Add the check.
+ (gcry_prime_generate, gcry_prime_group_generator): Likewise.
+ (gcry_mpi_randomize): Likewise, but no return.
+
+2021-01-18 Werner Koch <wk@gnupg.org>
+
+ ecc: Change an error code of gcry_ecc_mul_point.
+ + commit ca5a90bf70598247589078478d237287ca524453
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Return
+ GPG_ERR_UNKNOWN_CURVE.
+
+2021-01-15 NIIBE Yutaka <gniibe@fsij.org>
+ Tomáš Mráz <tm@t8m.info>
+
+ kdf: Add selftest.
+ + commit 7a0da24925361a3109474d0e433511467a9e35d1
+ * src/cipher-proto.h (_gcry_kdf_selftest): New.
+ * cipher/kdf.c (check_one, selftest_pbkdf2): New.
+ (_gcry_kdf_selftest): New.
+ * src/fips.c (run_kdf_selftests): New.
+ (_gcry_fips_run_selftests): Call run_kdf_selftests.
+
+2021-01-13 NIIBE Yutaka <gniibe@fsij.org>
+ Tomáš Mráz <tm@t8m.info>
+
+ cmac: Add selftest.
+ + commit 385a89e35b0b95f15b4c6e4d5482b1fc6906f7c5
+ * cipher/mac-cmac.c (check_one, selftests_cmac_3des): New.
+ (selftests_cmac_aes, cmac_selftest): New.
+ (cmac_ops): Add cmac_selftest.
+ * src/fips.c (run_mac_selftests): Add CMAC selftests.
+
+2021-01-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ sexp: Raise an error when an integer is negative with USG.
+ + commit 00d7c1c632019066a4884930d413ccc044d81af5
+ * src/sexp.c (do_vsexp_sscan): Return GPG_ERR_INV_ARG if negative.
+
+2021-01-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Add backward compatibility support for Ed25519 key in SEXP.
+ + commit 4768baf74be03d8973d004725f796aef329c45bf
+ * cipher/ecc-curves.c (_gcry_ecc_get_curve): Support Ed25519 keys with
+ parameter {p,a,b,g,n}.
+
+ ecc: Minor implementation change for _gcry_ecc_get_curve.
+ + commit 3fe7036d05f283df9441d42242f0047b6ea11a32
+ * cipher/ecc-curves.c (_gcry_ecc_get_curve): Flatten.
+
+2020-12-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add s390x/zSeries implementation of Poly1305.
+ + commit 1f75681cbba895ea2f7ea0637900721f4522e729
+ * cipher/Makefile.am: Add 'poly1305-s390x.S' and
+ 'asm-poly1305-s390x.h'.
+ * cipher/asm-poly1305-s390x.h: New
+ * cipher/chacha20-s390x.S (_gcry_chacha20_poly1305_s390x_vx_blocks8)
+ (_gcry_chacha20_poly1305_s390x_vx_blocks4_2_1): New, stitched
+ chacha20-poly1305 implementation.
+ * cipher/chacha20.c (USE_S390X_VX_POLY1305): New.
+ (_gcry_chacha20_poly1305_s390x_vx_blocks8)
+ (_gcry_chacha20_poly1305_s390x_vx_blocks4_2_1): New prototypes.
+ (_gcry_chacha20_poly1305_encrypt, _gcry_chacha20_poly1305_decrypt): Add
+ s390x/VX stitched chacha20-poly1305 code-path.
+ * cipher/poly1305-s390x.S: New.
+ * cipher/poly1305.c (USE_S390X_ASM, HAVE_ASM_POLY1305_BLOCKS): New.
+ [USE_S390X_ASM] (_gcry_poly1305_s390x_blocks1, poly1305_blocks): New.
+ * configure.ac (gcry_cv_gcc_inline_asm_s390x): Check for 'risbgn' and
+ 'algrk' instructions.
+ * tests/basic.c (_check_poly1305_cipher): Add large chacha20-poly1305
+ test vector.
+
+ Add s390x/zSeries implementation of ChaCha20.
+ + commit 6a0bb9ab7f886087d7edb0725c90485086a1c0b4
+ * cipher/Makefile.am: Add 'asm-common-s390x.h' and 'chacha20-s390x.S'.
+ * cipher/asm-common-s390x.h: New.
+ * cipher/chacha20-s390x.S: New.
+ * cipher/chacha20.c (USE_S390X_VX): New.
+ (CHACHA20_context_t): Change 'use_*' bit-field to unsigned type; Add
+ 'use_s390x'.
+ (_gcry_chacha20_s390x_vx_blocks8)
+ (_gcry_chacha20_s390x_vx_blocks4_2_1): New.
+ (chacha20_do_setkey): Add HW feature detect for s390x/VX.
+ (chacha20_blocks, do_chacha20_encrypt_stream_tail): Add s390x/VX
+ code-path.
+ * configure.ac: Add 'chacha20-s390x.lo'.
+
+ hwf-s390x: add VX vector instruction set detection.
+ + commit 1d13794780e3d052cd5ed6f900bf5900cf44b377
+ * configure.ac (gcry_cv_gcc_inline_asm_s390x_vx): New check.
+ * src/g10lib.h (HWF_S390X_VX): New.
+ * src/hwf-s390x.c (HWCAP_S390_VXRS): New.
+ (s390x_features) [HAVE_GCC_INLINE_ASM_S390X_VX]: Add VX feature check.
+ * src/hwfeatures.c (hwlist): Add "s390x-vx".
+
+ mpi/longlong: add s390x/zSeries macros.
+ + commit 0252cc9b62dfe20c77211f093b4fda54786177d3
+ * mpi/longlong.h [__s390x__] (add_ssaaaa, sub_ddmmss, UTItype)
+ (umul_ppmm, udiv_qrnnd): New.
+
+2020-12-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ hwf-arm: fix incorrect HWCAP2 for SHA1 and SHA2 on AArch32.
+ + commit 6b6bfd57d0a6b2b4577c084db35078cd9fadafa5
+ * src/hwf-arm.c (HWCAP2_SHA1, HWCAP2_SHA2): Change from bit indexes to
+ flags.
+
+ Add missing prototype for _gcry_mac_selftest.
+ + commit e47f04b4a28947c90db70ccaf93e149cfd5213c9
+ * src/cipher-proto.h (_gcry_hmac_selftest): Rename to...
+ (_gcry_mac_selftest): ... this.
+
+2020-12-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ Merge hmac-tests.c into mac-hmac.c.
+ + commit 2ab14b23afc092fd25395954c2a94db932ca4d95
+ * cipher/Makefile.am (EXTRA_DIST): Remove hmac-tests.c.
+ * cipher/hmac-tests.c: Remove, merge into...
+ * cipher/mac-hmac.c: ... here.
+
+2020-12-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add s390x/zSeries acceleration for SHA3.
+ + commit 7532e27cacb74c92fd561524a0897163b0fcd7f4
+ * cipher/asm-inline-s390x.h (KLMD_PADDING_STATE): New.
+ (kimd_execute): Change 'reg0' from read-only to read/write.
+ (klmd_shake_execute): New.
+ * cipher/keccak.c (USE_S390X_CRYPTO): New.
+ (KECCAK_CONTEXT) [USE_S390X_CRYPTO]: New members.
+ [USE_S390X_CRYPTO] (keccak_bwrite_s390x, keccak_final_s390x)
+ (keccak_bextract_s390x, keccak_write_s390x, keccak_extract_s390x): New.
+ (keccak_write) [USE_S390X_CRYPTO]: Use accelerated function if enabled.
+ (keccak_final) [USE_S390X_CRYPTO]: Likewise.
+ (keccak_extract) [USE_S390X_CRYPTO]: Likewise.
+ (keccak_init) [USE_S390X_CRYPTO]: Detect and setup zSeries
+ acceleration.
+
+ Add s390x/zSeries acceleration for SHA512.
+ + commit 45f0ec0c4e3b08627cbf7e65f5f110c321710d01
+ * cipher/sha512.c (USE_S390X_CRYPTO): New.
+ (SHA512_CONTEXT) [USE_S390X_CRYPTO]: New members.
+ (do_sha512_transform_s390x, do_sha512_final_s390x): New.
+ (sha512_init_common) [USE_S390X_CRYPTO]: Detect and setup s390x/zSeries
+ acceleration.
+ (sha512_final) [USE_S390X_CRYPTO]: Use accelerated final function.
+
+ Add s390x/zSeries acceleration for SHA256.
+ + commit 0b555c3cc7c2b80ec2628685946a6139a1996911
+ * cipher/sha256.c (USE_S390X_CRYPTO): New.
+ (SHA256_CONTEXT) [USE_S390X_CRYPTO]: New members.
+ (do_sha256_transform_s390x, do_sha256_final_s390x): New.
+ (sha256_common_init) [USE_S390X_CRYPTO]: Detect and setup s390x/zSeries
+ acceleration.
+ (sha256_final) [USE_S390X_CRYPTO]: Use accelerated final function.
+
+ Add s390x/zSeries acceleration for SHA1.
+ + commit 88570515b4ca92a44c4e40c31f877c11cc00ab68
+ * cipher/asm-inline-s390x.h (ALWAYS_INLINE): New.
+ (klmd_query): New.
+ (km_function_to_mask, kimd_execute, klmd_execute): Mark as always
+ inline.
+ * cipher/rijndael-s390x.c (ALWAYS_INLINE): Remove.
+ * cipher/sha1.c (do_sha1_transform_s390x, do_sha1_final_s390x): New.
+ (sha1_init) [SHA1_USE_S390X_CRYPTO]: Detect and setup s390x/zSeries
+ acceleration.
+ (sha1_final) [SHA1_USE_S390X_CRYPTO]: Use accelerated final function.
+ * cipher/sha1.h (SHA1_USE_S390X_CRYPTO): New.
+ (SHA1_CONTEXT) [SHA1_USE_S390X_CRYPTO]: New.
+
+ Add bulk AES-GCM acceleration for s390x/zSeries.
+ + commit 5aeb091f911398217b2e9facb9bdeb05c63d7844
+ * cipher/Makefile.am: Add 'asm-inline-s390x.h'.
+ * cipher/asm-inline-s390x.h: New.
+ * cipher/cipher-gcm.c [GCM_USE_S390X_CRYPTO] (ghash_s390x_kimd): New.
+ (setupM) [GCM_USE_S390X_CRYPTO]: Add setup for s390x GHASH function.
+ * cipher/cipher-internal.h (GCM_USE_S390X_CRYPTO): New.
+ * cipher/rijndael-s390x.c (u128_t, km_functions_e): Move to
+ 'asm-inline-s390x.h'.
+ (aes_s390x_gcm_crypt): New.
+ (_gcry_aes_s390x_setup_acceleration): Use 'km_function_to_mask'; Add
+ setup for GCM bulk function.
+
+ Add bulk function interface for GCM mode.
+ + commit f4e63e92dc0b79633f48b11d292dd7bdf2752ede
+ * cipher/cipher-gcm.c (do_ghash_buf): Proper handling for the case
+ where 'unused' gets filled to full blocksize.
+ (gcm_crypt_inner): New.
+ (_gcry_cipher_gcm_encrypt, _gcry_cipher_gcm_decrypt): Use
+ 'gcm_crypt_inner'.
+ * cipher/cipher-internal.h (cipher_bulk_ops_t): Add 'gcm_crypt'.
+
+ Add s390x/zSeries acceleration for AES.
+ + commit 9219d9d1b60c01a4c7dbde05ee6b5b52e0d7d072
+ * configure.ac: Add 'rijndael-s390x.lo'.
+ * cipher/Makefile.am: Add 'rijndael-s390x.c'.
+ * cipher/rijndael-internal.c (USE_S390X_CRYPTO): New.
+ (RIJNDAEL_context_s) [USE_S390X_CRYPTO]: New 'km*_func' members.
+ * cipher/rijndael-s390x.c: New.
+ * cipher/rijndael.c (_gcry_aes_s390x_setup_acceleration)
+ (_gcry_aes_s390x_setup_setkey)
+ (_gcry_aes_s390x_setup_prepare_decryption, _gcry_aes_s390x_encrypt)
+ (_gcry_aes_s390x_decrypt): New.
+ (do_setkey) [USE_S390X_CRYPTO]: Add s390x acceleration setup.
+
+ Add bulk function interface for OFB mode.
+ + commit f12b6788f2297391265af93a7794bfbc503de6d7
+ * cipher/cipher-internal.h (cipher_bulk_ops): Add 'ofb_enc'.
+ * cipher/cipher-ofb.c (_gcry_cipher_ofb_encrypt): Use bulk encryption
+ function if defined.
+ * cipher/basic.c (check_bulk_cipher_modes): Add OFB-AES test vectors.
+
+ hwf: add detection of s390x/zSeries hardware features.
+ + commit 128054767d5f864798a39d432997f7d38c4bf729
+ * configure.ac (gcry_cv_gcc_inline_asm_s390x)
+ (HAVE_CPU_ARCH_S390X): Add s390x detection support.
+ * mpi/config.links: Add setup for s390x links.
+ * src/Makefile.am: Add 'hwf-s390x.c'.
+ * src/g10lib.h (HWF_S390X_MSA, HWF_S390X_MSA_4, HWF_S390X_8): New.
+ * src/hwf_common.h (_gcry_hwf_detect_s390x): New.
+ * src/hwf-s390x.c: New.
+ * src/hwfeatures.c: Add "s390x-msa", "s390x-msa-4" and "s390x-msa-8".
+
+ tests/bench-slope: use same benchmarking for XTS as for other modes.
+ + commit 0e37bb32e215feb4716341f7053c4f54806645cb
+ * tests/bench-slope.c (bench_xts_encrypt_init): Use same buffer
+ sizes as other tests.
+ (bench_xts_encrypt_do_bench, bench_xts_decrypt_do_bench): Remove.
+ (xts_encrypt_ops): Use 'bench_encrypt_do_bench'.
+ (xts_decrypt_ops): Use 'bench_decrypt_do_bench'.
+
+ aarch64: mpi/longlong.h: fix operand size mismatch.
+ + commit c59b5b03a063ebc73935dbb10bc4f568faddbedf
+ * mpi/longlong.h [__aarch64__] (count_leading_zeros): Use correctly
+ sized temporary variable for asm output.
+
+ aarch64: use configure check for assembly ELF directives support.
+ + commit 8352b0ece5237e3f86f1525b072e8f690ad0fa94
+ * configure.ac (gcry_cv_gcc_asm_elf_directives): New check.
+ (HAVE_GCC_ASM_ELF_DIRECTIVES): New 'config.h' macro.
+ * cipher/asm-common-aarch64.h (ELF): Change feature macro check from
+ __ELF__ to HAVE_GCC_ASM_ELF_DIRECTIVES.
+
+2020-12-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ Reorganize self-tests for HMAC.
+ + commit c90fb0d8fb7a84bbcc8d6832de6a554405591850
+ * cipher/Makefile.am: Prepare merge of hmac-test.c into mac-hmac.c.
+ * cipher/hmac-tests.c: Ifdef-out run_selftests and _gcry_hmac_selftest.
+ * cipher/mac-internal.h: Include cipher-proto.h for selftest.
+ (gcry_mac_spec_ops): Add selftest field.
+ * cipher/mac-hmac.c: Include hmac-tests.c for migration.
+ (hmac_selftest) New.
+ (hmac_ops): Add hmac_selftest.
+ * cipher/gost28147.c, cipher/mac-cmac.c: Add new field for selftest.
+ * cipher/mac-gmac.c, cipher/mac-poly1305.c: Likewise..
+ * cipher/mac.c (_gcry_mac_selftest): New.
+ * src/fips.c (run_mac_selftests): Rename from run_hmac_selftests.
+ Use GCRY_MAC_HMAC_*, and call _gcry_mac_selftest.
+ (_gcry_fips_run_selftests): Use run_mac_selftests.
+
+2020-12-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Prevent link-time optimization from inlining __gcry_burn_stack.
+ + commit 1a83df98b198902ee6d71549231a3af37088d452
+ * src/g10lib.h (NOINLINE_FUNC): New attribute macro.
+ * src/misc.c (__gcry_burn_stack): Add NOINLINE_FUNC attribute.
+
+ tests/basic: check 32-bit and 64-bit overflow for CTR and ChaCha20.
+ + commit 2065720b5b0642cc1a0e08086a434244ebb1abf2
+ * tests/basic.c (check_one_cipher_ctr_reset)
+ (check_one_cipher_ctr_overflow): New.
+ (check_one_cipher): Add counter overflow tests for ChaCha20 and CTR
+ mode.
+
+ chacha20-ppc: fix 32-bit counter overflow handling.
+ + commit ed45eac3b721c1313902b977379fbd4886ccca7b
+ * cipher/chacha20-ppc.c (vec_add_ctr_u64, ADD_U64): New.
+ (_gcry_chacha20_ppc8_blocks1, _gcry_chacha20_ppc8_blocks4)
+ (_gcry_chacha20_poly1305_ppc8_blocks4): Use ADD_U64 when incrementing
+ counter.
+
+2020-12-03 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Put a work around to tests/random for macOS.
+ + commit 9769b40b54cf010a0c41c4ab05a7a88e17d70613
+ * configure.ac [*-apple-darwin*] (USE_POSIX_SPAWN_FOR_TESTS): New.
+ * tests/random.c [USE_POSIX_SPAWN_FOR_TESTS] (run_all_rng_tests): New.
+
+2020-11-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update to newer autoconf constructs.
+ + commit 9485ca7b5bf11194cff59edbfa6a0fba3bf6162a
+ * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Use AS_MESSAGE_LOG_FD
+ instead of AC_FD_CC.
+ (GNUPG_CHECK_MLOCK): Use AC_LINK_IFELSE instead of AC_TRY_LINK.
+ Use AC_RUN_IFELSE instead of AC_TRY_RUN.
+ * configure.ac (AC_ISC_POSIX): Replace by AC_SEARCH_LIBS.
+ Use AC_USE_SYSTEM_EXTENSIONS instead of AC_GNU_SOURCE.
+ Use AS_HELP_STRING instead of AC_HELP_STRING.
+ (AC_TYPE_SIGNAL): Remove.
+ (AC_DECL_SYS_SIGLIST): Remove.
+ * m4/Makefile.am (EXTRA_DIST): Update.
+ * m4/onceonly.m4: Remove.
+ * m4/socklen.m4: Update from gnulib.
+ * m4/libtool.m4: Update from libgpg-error.
+ * m4/gpg-error.m4: Update from libgpg-error.
+ * m4/noexecstack.m4: Use AS_HELP_STRING instead of AC_HELP_STRING.
+
+ build: Use modern Autoconf check for type.
+ + commit 425bf499185d78aa8fcad6a30b8771e7865d449d
+ * configure.ac (byte, ushort, us6, u32, u64): Use AC_CHECK_TYPES.
+ * cipher/poly1305.c: Use HAVE_TYPE_U64.
+ * src/hmac256.c: HAVE_TYPE_U32.
+ * src/types.h: Use HAVE_TYPE_BYTE, HAVE_TYPE_USHORT, HAVE_TYPE_U16,
+ HAVE_TYPE_U32, and HAVE_TYPE_U64.
+
+ m4: Update with newer autoconf constructs.
+ + commit 908e347fb68b28e180ac816b5050406358e81a0f
+ * src/libgcrypt.m4: Replace AC_HELP_STRING to AS_HELP_STRING.
+
+2020-10-30 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Handle removed zeros at the beginning for Ed25519.
+ + commit 361a0588489cf4a539da8debd1771024a1faa218
+ * cipher/ecc-curves.c (mpi_ec_setup_elliptic_curve): Accept private
+ key with removed zeros.
+
+2020-10-23 Werner Koch <wk@gnupg.org>
+
+ random: Allow for a Unicode random seed file on Windows.
+ + commit 24341f58f0d38bd62c45d285bcf8472f82b56135
+ * random/random-csprng.c (utf8_to_wchar) [W32]: New.
+ (any8bitchar) [W32]: New.
+ (my_open): New. Replace all calls to open with this.
+
+2020-10-01 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ tests: Fix typo in comment.
+ + commit 4a50c6b88d6d8d843e50add851a8a5e691349097
+ * tests/basic.c: Fix typo in comment.
+
+2020-09-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: clean-up prepare_decryption function.
+ + commit 2051d5bd6f732a36e5a536cba734531a9e2e915f
+ * cipher/rijndael-internal.h (rijndael_prepare_decfn_t): New.
+ (RIJNDAEL_context_s): New member 'prepare_decryption'.
+ * cipher/rijndael-padlock.c (_gcry_aes_padlock_prepare_decryption): New.
+ * cipher/rijndael.c (_gcry_aes_padlock_prepare_decryption): New.
+ (do_setkey): Setup 'ctx->prepare_decryption' for each acceleration type.
+ (prepare_decryption): Remove calls to other prepare decryption functions.
+ (check_decryption_preparation): Call 'ctx->prepare_decryption' instead
+ of 'prepare_decryption'.
+
+ rijndael: clean-up generic bulk functions.
+ + commit 7679c918ade9d334bc80cb8c10916bbc847ff382
+ * cipher/rijndael.c (_gcry_aes_cfb_enc, _gcry_aes_cbc_enc)
+ (_gcry_aes_ctr_enc, _gcry_aes_cfb_dec, _gcry_aes_cbc_dec)
+ (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth, _gcry_aes_xts_crypt): Remove
+ calls to hardware accelerated AES bulk functions.
+
+ cipher: setup bulk functions at each algorithms key setup.
+ + commit 51271eb86bcb0eb89e55a2add9607c503f182c89
+ * cipher/cipher-internal.h (cipher_mode_ops_t, cipher_bulk_ops_t): New.
+ (gcry_cipher_handle): Define members 'mode_ops' and 'bulk' using new
+ types.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Remove bulk function
+ setup.
+ (cipher_setkey): Pass context bulk function pointer to algorithm setkey
+ function.
+ * cipher/cipher-selftest.c (_gcry_selftest_helper_cbc)
+ (_gcry_selftest_helper_cfb, _gcry_selftest_helper_ctr): Remove bulk
+ function parameter; Use bulk function returned by setkey function.
+ * cipher/cipher-selftest.h (_gcry_selftest_helper_cbc)
+ (_gcry_selftest_helper_cfb, _gcry_selftest_helper_ctr): Remove bulk
+ function parameter.
+ * cipher/arcfour.c (arcfour_setkey): Change 'hd' parameter to
+ 'bulk_ops'.
+ * cipher/blowfish.c (bf_setkey): Change 'hd' parameter to
+ 'bulk_ops'; Setup 'bulk_ops' with bulk acceleration functions.
+ (_gcry_blowfish_ctr_enc, _gcry_blowfish_cbc_dec)
+ (_gcry_blowfish_cfb_dec): Make static.
+ (selftest_ctr, selftest_cbc, selftest_cfb): Do not pass bulk function
+ to selftest helper.
+ (selftest): Pass 'bulk_ops' to setkey function.
+ * cipher/camellia.c (camellia_setkey): Change 'hd' parameter to
+ 'bulk_ops'; Setup 'bulk_ops' with bulk acceleration functions.
+ (_gcry_camellia_ctr_enc, _gcry_camellia_cbc_dec)
+ (_gcry_camellia_cfb_dec, _gcry_camellia_ocb_crypt)
+ (_gcry_camellia_ocb_auth): Make static.
+ (selftest_ctr, selftest_cbc, selftest_cfb): Do not pass bulk function
+ to selftest helper.
+ (selftest): Pass 'bulk_ops' to setkey function.
+ * cipher/cast5.c (cast_setkey): Change 'hd' parameter to
+ 'bulk_ops'; Setup 'bulk_ops' with bulk acceleration functions.
+ (_gcry_cast5_ctr_enc, _gcry_cast5_cbc_dec, _gcry_cast5_cfb_dec): Make
+ static.
+ (selftest_ctr, selftest_cbc, selftest_cfb): Do not pass bulk function
+ to selftest helper.
+ (selftest): Pass 'bulk_ops' to setkey function.
+ * cipher/chacha20.c (chacha20_setkey): Change 'hd' parameter to
+ 'bulk_ops'.
+ * cipher/cast5.c (do_tripledes_setkey): Change 'hd' parameter to
+ 'bulk_ops'; Setup 'bulk_ops' with bulk acceleration functions.
+ (_gcry_3des_ctr_enc, _gcry_3des_cbc_dec, _gcry_3des_cfb_dec): Make
+ static.
+ (bulk_selftest_setkey): Change 'hd' parameter to 'bulk_ops'.
+ (selftest_ctr, selftest_cbc, selftest_cfb): Do not pass bulk function
+ to selftest helper.
+ (do_des_setkey): Change 'hd' parameter to 'bulk_ops'.
+ * cipher/gost28147.c (gost_setkey): Change 'hd' parameter to
+ 'bulk_ops'.
+ * cipher/idea.c (idea_setkey): Change 'hd' parameter to 'bulk_ops'.
+ * cipher/rfc2268.c (do_setkey): Change 'hd' parameter to 'bulk_ops'.
+ * cipher/rijndael.c (do_setkey): Change 'hd' parameter to
+ 'bulk_ops'; Setup 'bulk_ops' with bulk acceleration functions.
+ (rijndael_setkey): Change 'hd' parameter to 'bulk_ops'.
+ (_gcry_aes_cfb_enc, _gcry_aes_cfb_dec, _gcry_aes_cbc_enc)
+ (_gcry_aes_cbc_dec, _gcry_aes_ctr_enc, _gcry_aes_ocb_crypt)
+ (_gcry_aes_ocb_auth, _gcry_aes_xts_crypt): Make static.
+ (selftest_basic_128, selftest_basic_192, selftest_basic_256): Pass
+ 'bulk_ops' to setkey function.
+ (selftest_ctr, selftest_cbc, selftest_cfb): Do not pass bulk function
+ to selftest helper.
+ * cipher/salsa20.c (salsa20_setkey): Change 'hd' parameter to
+ 'bulk_ops'.
+ * cipher/seed.c (seed_setkey): Change 'hd' parameter to 'bulk_ops'.
+ * cipher/serpent.c (serpent_setkey): Change 'hd' parameter to
+ 'bulk_ops'; Setup 'bulk_ops' with bulk acceleration functions.
+ (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec, _gcry_serpent_cfb_dec)
+ (_gcry_serpent_ocb_crypt, _gcry_serpent_ocb_auth): Make static.
+ (selftest_ctr_128, selftest_cbc_128, selftest_cfb_128): Do not pass
+ bulk function to selftest helper.
+ * cipher/sm4.c (sm4_setkey): Change 'hd' parameter to 'bulk_ops'; Setup
+ 'bulk_ops' with bulk acceleration functions.
+ (_gcry_sm4_ctr_enc, _gcry_sm4_cbc_dec, _gcry_sm4_cfb_dec)
+ (_gcry_sm4_ocb_crypt, _gcry_sm4_ocb_auth): Make static.
+ (selftest_ctr_128, selftest_cbc_128, selftest_cfb_128): Do not pass
+ bulk function to selftest helper.
+ * cipher/twofish.c (twofish_setkey): Change 'hd' parameter to
+ 'bulk_ops'; Setup 'bulk_ops' with bulk acceleration functions.
+ (_gcry_twofish_ctr_enc, _gcry_twofish_cbc_dec)
+ (_gcry_twofish_cfb_dec, _gcry_twofish_ocb_crypt)
+ (_gcry_twofish_ocb_auth): Make static.
+ (selftest_ctr, selftest_cbc, selftest_cfb): Do not pass bulk function
+ to selftest helper.
+ (selftest, main): Pass 'bulk_ops' to setkey function.
+ * src/cipher-proto.h: Forward declare 'cipher_bulk_ops_t'.
+ (gcry_cipher_setkey_t): Replace 'hd' with 'bulk_ops'.
+ * src/cipher.h: Remove bulk acceleration function prototypes for
+ 'aes', 'blowfish', 'cast5', 'camellia', '3des', 'serpent', 'sm4' and
+ 'twofish'.
+
+2020-09-21 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: tidy do_setkey little bit.
+ + commit e0829ae648d9d9da67cd8a8fae7aa05774a0d0f7
+ * cipher/rijndael.c (do_setkey): Reduce number of ifdefs by using
+ function pointer for accelerated key-setup.
+
+2020-09-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-aesni: tweak x86_64 AES-NI for better performance on AMD Zen2.
+ + commit f96989f0e9085fa58b475131d29b37f68ba564ec
+ * cipher/rijndael-aesni.c (do_aesni_enc_vec8, do_aesni_dec_vec8): Move
+ first round key xoring and last round out to caller.
+ (do_aesni_ctr_4): Change low 8-bit counter overflow check to 8-bit
+ addition to low-bits and detect overflow from carry flag; Adjust
+ slow path to restore counter.
+ (do_aesni_ctr_8): Same as above; Interleave first round key xoring and
+ first round with CTR generation on fast path; Interleave last round
+ with output xoring.
+ (_gcry_aes_aesni_cfb_dec, _gcry_aes_aesni_cbc_dec): Add first round
+ key xoring; Change order of last round xoring and output xoring
+ (shorten the dependency path).
+ (_gcry_aes_aesni_ocb_auth): Add first round key xoring and last round
+ handling.
+
+2020-08-26 Werner Koch <wk@gnupg.org>
+
+ build: Allow customization of the signing key.
+ + commit 9cd92ebae21900e54cc3d8b607c8ed1afbf2eb9b
+ * Makefile.am (sign-release): Read variabales from user configuration.
+
+2020-08-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Fix basic.c.
+ + commit fd51bc523d095168ee9367fe3f18d18f7a88ad90
+ * tests/basic.c (check_one_hmac): Fix error paths.
+ (check_pubkey_crypt): Fix wrong call of gcry_sexp_new.
+
+ ecc: Fix an error path.
+ + commit 65a2cd139e21250e6581a4f610015937e7b91451
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Avoid null dereference on
+ error.
+
+2020-07-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ chacha20-aarch64: improve performance through higher SIMD interleaving.
+ + commit 8d7b1d0a52bde173646e5b42b31d23593eabecf2
+ * cipher/chacha20-aarch64.S (ROTATE2, ROTATE2_8, ROTATE2_16)
+ (QUARTERROUND2): Replace with...
+ (ROTATE4, ROTATE4_8, ROTATE4_16, QUARTERROUND4): ...these.
+ (_gcry_chacha20_aarch64_blocks4)
+ (_gcry_chacha20_poly1305_aarch64_blocks4): Adjust to use QUARTERROUND4.
+
+ tests/bench-slope: improve CPU frequency auto-detection.
+ + commit f1c3db3bf40e07cfd1a6a92209865ee7a98129ca
+ * configure.ac (gcry_cv_have_asm_volatile_memory): Check also if
+ assembly memory barrier with input/output register is supported.
+ * tests/bench-slope.c (auto_ghz_bench): Change to use base operation
+ that takes two CPU cycles and unroll loop by 1024 operations.
+
+ Enable jitter entropy also on non-x86 architectures.
+ + commit 886120f33bd3f10e6e6a09920eca1f9ed81044e7
+ * configure.ac: Do not force jentsupport to "n/a" on non-x86
+ architectures.
+
+ random/jitterentropy: fix USE_JENT == JENT_USES_GETTIME code path.
+ + commit 4ed9b949485448816a70d86260d572f08ae34621
+ * random/jitterentropy-base-user.h (jent_get_nstime): Use 'tv' variable
+ instead of non-existing 'time'.
+
+ Camellia AES-NI/AVX/AVX2 size optimization.
+ + commit 4c0e244fc53e0f7b927bfe4cf54695b5d282fd27
+ * cipher/camellia-aesni-avx-amd64.S: Use loop for handling repeating
+ '(enc|dec)_rounds16/fls16' portions of encryption/decryption.
+ * cipher/camellia-aesni-avx2-amd64.S: Use loop for handling repeating
+ '(enc|dec)_rounds32/fls32' portions of encryption/decryption.
+
+2020-07-14 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Support reading EC point in compressed format for good curves.
+ + commit e0dabf74bf276500257f15b85ded9cf24ccc8334
+ * cipher/ecc-curves.c (gcry_ecc_get_curve): Handle G, differently.
+ * cipher/ecc-misc.c (_gcry_ecc_sec_decodepoint): Support compressed
+ representation of EC point. Rename from _gcry_ecc_os2ec.
+ * cipher/ecc-sm2.c (_gcry_ecc_sm2_decrypt) Follow the change.
+ * cipher/ecc.c (ecc_decrypt_raw): Likewise.
+ * mpi/ec.c (_gcry_mpi_ec_set_point): Likewise.
+ * src/ec-context.h: API change _gcry_ecc_sec_decodepoint from
+ _gcry_ecc_os2ec.
+ * tests/basic.c (check_pubkey): Use compressed representation
+ for two public keys of NIST P192 and NIST P256.
+
+2020-07-06 Werner Koch <wk@gnupg.org>
+
+ mpi: Consider +0 and -0 the same in mpi_cmp.
+ + commit 1f3a92e103d4a8e019d8d022647a2b9fb2681327
+ * mpi/mpi-cmp.c (do_mpi_cmp): Check size of U an V.
+
+2020-06-23 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix length computation.
+ + commit 1db1dc7945b111b6e20a8420ad38a358316681ab
+ * cipher/ecc-curves.c (mpi_ec_setup_elliptic_curve): Add one only for
+ Edwards case.
+
+2020-06-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add SM4 x86-64/AES-NI/AVX2 implementation.
+ + commit 35a78eb248d6bacd2a58477a122a0020d796ce63
+ * cipher/Makefile.am: Add 'sm4-aesni-avx2-amd64.S'.
+ * cipher/sm4-aesni-avx2-amd64.S: New.
+ * cipher/sm4.c (USE_AESNI_AVX2): New.
+ (SM4_context) [USE_AESNI_AVX2]: Add 'use_aesni_avx2'.
+ [USE_AESNI_AVX2] (_gcry_sm4_aesni_avx2_ctr_enc)
+ (_gcry_sm4_aesni_avx2_cbc_dec, _gcry_sm4_aesni_avx2_cfb_dec)
+ (_gcry_sm4_aesni_avx2_ocb_enc, _gcry_sm4_aesni_avx2_ocb_dec)
+ (_gcry_sm4_aesni_avx_ocb_auth): New.
+ (sm4_setkey): Enable AES-NI/AVX2 if supported by HW.
+ (_gcry_sm4_ctr_enc, _gcry_sm4_cbc_dec, _gcry_sm4_cfb_dec)
+ (_gcry_sm4_ocb_crypt, _gcry_sm4_ocb_auth) [USE_AESNI_AVX2]: Add
+ AES-NI/AVX2 bulk functions.
+ * configure.ac: Add ''sm4-aesni-avx2-amd64.lo'.
+
+ Add SM4 x86-64/AES-NI/AVX implementation.
+ + commit c9a3f1bb91e63033e3bf3e06bdd6075622626d0d
+ * cipher/Makefile.am: Add 'sm4-aesni-avx-amd64.S'.
+ * cipher/sm4-aesni-avx-amd64.S: New.
+ * cipher/sm4.c (USE_AESNI_AVX, ASM_FUNC_ABI): New.
+ (SM4_context) [USE_AESNI_AVX]: Add 'use_aesni_avx'.
+ [USE_AESNI_AVX] (_gcry_sm4_aesni_avx_expand_key)
+ (_gcry_sm4_aesni_avx_crypt_blk1_8, _gcry_sm4_aesni_avx_ctr_enc)
+ (_gcry_sm4_aesni_avx_cbc_dec, _gcry_sm4_aesni_avx_cfb_dec)
+ (_gcry_sm4_aesni_avx_ocb_enc, _gcry_sm4_aesni_avx_ocb_dec)
+ (_gcry_sm4_aesni_avx_ocb_auth, sm4_aesni_avx_crypt_blk1_8): New.
+ (sm4_expand_key) [USE_AESNI_AVX]: Use AES-NI/AVX key setup.
+ (sm4_setkey): Enable AES-NI/AVX if supported by HW.
+ (_gcry_sm4_ctr_enc, _gcry_sm4_cbc_dec, _gcry_sm4_cfb_dec)
+ (_gcry_sm4_ocb_crypt, _gcry_sm4_ocb_auth) [USE_AESNI_AVX]: Add
+ AES-NI/AVX bulk functions.
+ * configure.ac: Add ''sm4-aesni-avx-amd64.lo'.
+
+ Optimizations for SM4 cipher.
+ + commit 81fee26bbbae820a311a3ce3ac55e304655c2acd
+ * cipher/cipher.c (_gcry_cipher_open_internal): Add SM4 bulk
+ functions.
+ * cipher/sm4.c (ATTR_ALIGNED_64): New.
+ (sbox): Convert to ...
+ (sbox_table): ... this structure for sbox hardening as is done
+ for AES and GCM.
+ (prefetch_sbox_table): New.
+ (sm4_t_non_lin_sub): Make inline; Optimize sbox access pattern.
+ (sm4_key_lin_sub): Make inline; Tune slightly.
+ (sm4_key_sub, sm4_enc_sub): Make inline.
+ (sm4_round): Make inline; Take 'x' as separate parameters instead
+ of array.
+ (sm4_expand_key): Return void; Drop keylen; Unroll loops by 4;
+ Wipe sensitive variables at end; Move key-length check to
+ 'sm4_setkey'.
+ (sm4_setkey): Add initial self-test step; Add key-length check;
+ Remove burn stack (as variables wiped in 'sm4_expand_key').
+ (sm4_do_crypt): Return burn stack depth; Unroll loops by 4.
+ (sm4_encrypt, sm4_decrypt): Prefetch sbox table; Return burn
+ stack from 'sm4_do_crypt', as allows tail-call optimization
+ by compiler.
+ (sm4_do_crypt_blks2): New two parallel block function for greater
+ instruction level parallelism.
+ (sm4_crypt_blocks, _gcry_sm4_ctr_enc, _gcry_sm4_cbc_dec)
+ (_gcry_sm4_cfb_dec, _gcry_sm4_ocb_crypt, _gcry_sm4_ocb_auth): New
+ bulk processing functions.
+ (selftest_ctr_128, selftest_cbc_128, selftest_cfb_128): New
+ bulk processing self-tests.
+ (sm4_selftest): Clear SM4 context before use; Use 'sm4_expand_key'
+ instead of 'sm4_setkey'; Call bulk processing self-tests.
+ * src/cipher.h (_gcry_sm4_ctr_enc, _gcry_sm4_ctr_dec)
+ (_gcry_sm4_cfb_dec, _gcry_sm4_ocb_crypt, _gcry_sm4_ocb_auth): New.
+ * tests/basic.c (check_ocb_cipher): Add SM4-OCB test vector.
+
+2020-06-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: For Ed448, it's only for EdDSA.
+ + commit a6177e1bc948a7af052d62bcd62aa6b5825bfaff
+ * cipher/ecc.c (ecc_sign): Ed448 is only for EdDSA.
+ Hash algo is determined by the curve.
+ (ecc_verify): Likewise.
+ * tests/t-ed448.c (one_test): Don't specify (flags eddsa).
+ Don't specify hash-algo.
+
+ ecc: Fix the condition for EdDSA data handling.
+ + commit f2847d56cce2afdd993f797812a673495a41c234
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): It may be
+ the encoding context which determines EdDSA. Hash-algo can be
+ omitted. Flags are OR-ed.
+
+ ecc: Support EdDSA with context and enabling PH(M).
+ + commit ba78ad8f19674b94edfdf4998f40feee081481bc
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_compute_h_d): Simplify.
+ (DOM4_0_NONE, DOM4_0_NONE_LEN): Remove.
+ (DOM25519, DOM25519_LEN): New.
+ (DOM448, DOM448_LEN): New.
+ (_gcry_ecc_eddsa_sign): Support EdDSA with context and PH.
+ (_gcry_ecc_eddsa_verify): Likewise.
+ * tests/t-ed448.c: Add tests with context and PH=1.
+ * tests/t-ed448.inp: Add test data.
+
+ ecc: Change EdDSA internal API.
+ + commit 2856ac14ae3e4c9e6288e1f0d8bc1945bb874081
+ * cipher/ecc-common.h (_gcry_ecc_eddsa_sign): Last arg is CTX.
+ (_gcry_ecc_eddsa_verify): Ditto.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_sign): Get hash algo from CTX.
+ (_gcry_ecc_eddsa_verify): Ditto.
+ * cipher/ecc.c (ecc_sign, ecc_verify): Follow the change.
+
+2020-06-17 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Support "label" for EdDSA context in data.
+ + commit 1cf49754694611620fd383327cf127e91f6883df
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Handle ctx->label.
+
+ ecc: Initialize key before handling data.
+ + commit d51a9c259d49c63121fab48bce48d826e9b57733
+ * cipher/ecc.c (ecc_sign): Initialize key at first.
+ (ecc_verify): Likewise.
+
+ ecc: Add new flag "prehash".
+ + commit 9a640eba6dd7504c90a65151cdaf1e4093a8b475
+ * src/cipher.h (PUBKEY_FLAG_PREHASH): New.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Parse it.
+
+ ecc: No (flags eddsa) required for Ed448.
+ + commit b1721f9b291a4c226caa2bfbe4fefe8fde5216e0
+ * cipher/ecc.c (check_secret_key): Ed448 means EdDSA.
+ (ecc_generate): Likewise.
+ * tests/t-ed448.c (one_test): Remove the flag in key.
+
+ ecc: Support Ed448 by _gcry_ecc_compute_public.
+ + commit 5585ee4947082f932ee01d93dfe295c769e96671
+ * cipher/ecc-misc.c (_gcry_ecc_compute_public): Handle Ed448.
+
+2020-06-16 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ tests: Add basic test-vectors for SM4.
+ + commit c1535d0b8797e9b3bbfb5193b6ab23bf788ffd36
+ * tests/basic.c (check_ciphers): Add SM4 check and test-vectors.
+
+ Add SM4 symmetric cipher algorithm.
+ + commit ddcce166ab8bc6f51f5b509bcbea13a8746384ec
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add sm4.c.
+ * cipher/cipher.c (cipher_list, cipher_list_algo301): Add
+ _gcry_cipher_spec_sm4.
+ * cipher/mac-cmac.c (map_mac_algo_to_cipher): Add cmac SM4.
+ (_gcry_mac_type_spec_cmac_sm4): Add cmac SM4.
+ * cipher/mac-internal.h: Declare spec_cmac_sm4.
+ * cipher/mac.c (mac_list, mac_list_algo201): Add cmac SM4.
+ * cipher/sm4.c: New.
+ * configure.ac (available_ciphers): Add sm4.
+ * doc/gcrypt.texi: Add SM4 document.
+ * src/cipher.h: Add declarations for SM4 and cmac SM4.
+ * src/gcrypt.h.in (gcry_cipher_algos): Add algorithm ID for SM4.
+
+2020-06-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ doc: add GCRY_MD_SM3, GCRY_MAC_HMAC_SM3 and GCRY_MAC_GOST28147_IMIT.
+ + commit 6c571bfda6409d7d668f5d44cea0c6c31e2688be
+ * doc/gcrypt.texi: add GCRY_MD_SM3, GCRY_MAC_HMAC_SM3 and
+ GCRY_MAC_GOST28147_IMIT.
+
+2020-06-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix Ed448 key generation.
+ + commit c15cc1a38199cf0d758579eb01d0e88c99cd4b80
+ * cipher/ecc.c (ecc_generate): Fix point representation for Ed448.
+
+ ecc,test: Add testing Ed448.
+ + commit c7779e499e9051ee79ed720f576dbf40d90cdfb1
+
+
+ ecc: Support Ed448 for verify.
+ + commit d1baad35c65030e41fcba69854c57032eee0d111
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_verify): Support Ed448.
+
+ ecc: Support Ed448 signing.
+ + commit 951b37c5038667b461692454397bb058b5e1e184
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_sign): Support Ed448.
+
+ ecc: Use SHAKE256 in EdDSA with Ed448.
+ + commit 32d6d73d44d372dd1ec0b08ba03f1b7b085c09d9
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_compute_h_d): Fix for SHAKE256.
+
+ ecc: Support shake128 and shake256 for message digest.
+ + commit f6815a96e51be44a361ddcd3a20a5b969b1dab1b
+ * cipher/pubkey-util.c (get_hash_algo): Add shake128 and shake256.
+
+ ecc: Support Ed448 for key generation.
+ + commit e25446ecc04442b399302ce72db6d5ea2e9e85e8
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_compute_h_d): Support Ed448.
+ (_gcry_ecc_eddsa_genkey): Support Ed448, using
+ _gcry_ecc_eddsa_compute_h_d.
+
+ ecc: Support Ed448 in decoding point.
+ + commit bd22b029bbf50737f90535c506fba4f812bcf040
+ * cipher/ecc-eddsa.c (ecc_ed448_recover_x): New.
+ (_gcry_ecc_eddsa_recover_x): Support Ed448.
+ (_gcry_ecc_eddsa_decodepoint): Support Ed448.
+ * mpi/ec.c (_gcry_mpi_ec_decode_point): For Ed448, use
+ _gcry_ecc_eddsa_decodepoint.
+
+ ecc: Add new curve: Ed448.
+ + commit 339b03acf0971a31997901dd674fb75c4dde31d0
+ * cipher/ecc-curves.c (curve_aliases): Add Ed448.
+ (domain_parms): Add domain parameters for Ed448.
+ * tests/curves.c (N_CURVES): Increment.
+
+ ecc: Fix EdDSA encoding for Ed448.
+ + commit 3386aaf84d4d89b6ff931533df2ff82ed3f7c7f9
+ * cipher/ecc-curves.c (mpi_ec_setup_elliptic_curve): Fix point/scalar
+ length condition.
+ * cipher/ecc-eddsa.c (eddsa_encodempi): The second argument is NBITS.
+ (eddsa_encode_x_y): Likewise.
+ (_gcry_ecc_eddsa_encodepoint): Follow the change.
+ (_gcry_ecc_eddsa_ensure_compact): Likewise.
+ (_gcry_ecc_eddsa_decodepoint): Likewise.
+ (_gcry_ecc_eddsa_sign): Likewise. Remove restriction of 256 bits.
+
+2020-06-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix NBITS in domain_parms.
+ + commit db7b2c591004868abedbc2c19d3bb2efebf8529d
+ * cipher/ecc-curves.c (cipher/ecc-curves.c): It's NBITS of 'p'.
+
+2020-06-08 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: fix UBSAN warning on left shift by 24 places with type 'int'
+ + commit 6cdd7268fe19b066ddb373e2f3c0b7ebf9b938dd
+ * cipher/rijndael.c (do_encrypt_fn, do_decrypt_fn): Cast final
+ sbox/inv_sbox look-ups to 'u32' type.
+
+ Disable all assembly modules with --disable-asm.
+ + commit 3060aadec396802af13f08c4b2dd1b28f2a68c5d
+ * configure.ac (try_asm_modules): Update description,
+ "MPI" => "MPI and cipher".
+ (gcry_cv_gcc_arm_platform_as_ok, gcry_cv_gcc_aarch64_platform_as_ok)
+ (gcry_cv_gcc_inline_asm_ssse3, gcry_cv_gcc_inline_asm_pclmul)
+ (gcry_cv_gcc_inline_asm_shaext, gcry_cv_gcc_inline_asm_sse41)
+ (gcry_cv_gcc_inline_asm_avx, gcry_cv_gcc_inline_asm_avx2)
+ (gcry_cv_gcc_inline_asm_bmi2, gcry_cv_gcc_amd64_platform_as_ok)
+ (gcry_cv_gcc_platform_as_ok_for_intel_syntax)
+ (gcry_cv_cc_arm_arch_is_v6, gcry_cv_gcc_inline_asm_neon)
+ (gcry_cv_gcc_inline_asm_aarch32_crypto)
+ (gcry_cv_gcc_inline_asm_aarch64_neon)
+ (gcry_cv_gcc_inline_asm_aarch64_crypto)
+ (gcry_cv_cc_ppc_altivec, gcry_cv_gcc_inline_asm_ppc_altivec)
+ (gcry_cv_gcc_inline_asm_ppc_arch_3_00): Check for "try_asm_modules".
+ * mpi/config.links: Set "mpi_cpu_arch" to "disabled"
+ with --disable-asm.
+
+2020-06-05 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ mpicalc: fix typo.
+ + commit 2dd3e27fc53cf408f799d2e7b379c1441e0d62c8
+ * src/mpicalc.c (print_help): fix typo in commands description.
+
+2020-06-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Fix flags in mpi_copy for opaque MPI.
+ + commit 78a5a1aa7627afaa24e2ea1eb9b08f1cfdd71561
+ * mpi/mpiutil.c (_gcry_mpi_copy): Copy flags.
+
+2020-06-03 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Use opaque MPI for 'd' of Ed25519/EdDSA.
+ + commit 0d8346f84a1f5865da3375ce92420d92fb5ae652
+ * cipher/ecc-curves.c (mpi_ec_setup_elliptic_curve): Add FLAGS.
+ Use opaque MPI for Ed25519/EdDSA, too.
+ (_gcry_mpi_ec_internal_new): Follow the change.
+ (_gcry_mpi_ec_new): Likewise.
+
+2020-06-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cipher-ocb: fix out-of-array stack memory access.
+ + commit 8cfaeae42522778052c36fceccab504826a30cbf
+ * cipher/cipher-ocb.c (bit_copy): Do not access memory beyond
+ 's' array when bitoff > 8.
+
+2020-06-01 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: More fix of off-by-one mistake mpi_invm_pow2.
+ + commit 6a2cd0fe78a9cdc78911694a84b08762dd8658b4
+ * mpi/mpi-inv.c (mpi_invm_pow2): Avoid out-of-band read/write.
+
+ ecc: Consistently handle parameters as unsigned value.
+ + commit 6f8b1d4cb798375e6d830fd6b73c71da93ee5f3f
+ * cipher/ecc-curves.c (_gcry_ecc_get_curve): Parse as unsigned value.
+
+2020-05-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ sexp: Fix coding of line break.
+ + commit 33c972b6a6fe79aacb0a732d1df9a9deacafca29
+ * src/sexp.c (_gcry_sexp_vextract_param): Add missing newline.
+
+2020-05-14 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Make sure it's the fixed size bytes.
+ + commit eb2288f3b1f338a9aec11d559ec84bdb201960e1
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_decodepoint): Checking the size
+ of EC point representation, return GPG_ERR_INV_OBJ if not valid.
+
+2020-05-13 Werner Koch <wk@gnupg.org>
+
+ ecc: Detect the use of a Montgomery curve earlier in ecc_verify.
+ + commit d0f995afe2e0228d3b9e30b0fc7091631d7d0090
+ * cipher/ecc.c (ecc_verify): Do not allow a Montgomery curve.
+
+2020-05-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Fix off-by-one mistake mpi_invm_pow2.
+ + commit 69b55f87053ce2494cd4b38dc600f867bc4355be
+ * mpi/mpi-inv.c (mpi_invm_pow2): Avoid out-of-band read/write.
+
+2020-05-12 Werner Koch <wk@gnupg.org>
+
+ ecc: Initialize a dummy parameter.
+ + commit 75a7b17878e02c3882070d6c86e0d2efbc3d680a
+ * cipher/ecc.c (ecc_verify): Rename flags to dummy_flags and
+ initialize.
+
+2020-05-06 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ tests/benchmark.c: fix error message for invalid MAC algo.
+ + commit 79e196a610b1b734a1f573288b148d62787f5281
+
+
+2020-04-27 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ ecc: Fix typo error in ecc-gost.
+ + commit fe688ce7e14f14d7d3a7e16aa0304d24b5b1a179
+ * cipher/ecc-gost.c (_gcry_ecc_gost_verify): Fix typo in comment.
+
+2020-04-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Fix the return value of mpi_invm_generic.
+ + commit f10eb240a30ac115cfeb63848c67a936e1059ab9
+ * mpi/mpi-inv.c (mpi_invm_generic): Return correct value.
+
+2020-04-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Fix return value of mpi_invm_generic.
+ + commit bc3b6a6a45cf9fa6cc0556da870628c53570f52f
+ * mpi/mpi-inv.c (mpi_invm_generic): Return 0 if inverse does not exist.
+
+ mpi: More use of mpih API for _gcry_mpi_invm.
+ + commit 559ba9b36c9cdf4762d28beb3b4c59665c671818
+ * mpi/mpi-inv.c (mpi_invm_pow2): Remove.
+ (_gcry_mpi_invm): Use mpih_invm_pow2 instead.
+
+ mpi: Use mpih interface internally for mpi-inv.
+ + commit beefbb90d71d7fbd0b4429472b7d4b39670ff64b
+ * mpi/mpi-inv.c (mpih_invm_pow2): Converted from mpi_invm_pow2.
+ (mpi_invm_pow2): Use mpih_invm_pow2.
+
+ mpi: Fix size of A in mpi_invm_pow2.
+ + commit efa5151ea1c2a2c049b2651581e71b6becba4e16
+ * mpi/mpi-inv.c (mpi_invm_pow2): Fix size of A.
+
+2020-04-23 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: More fix for _gcry_mpi_invm.
+ + commit f81a1dd7317513000e5bc4d1bfffd6d2bfb8c2a2
+ * mpi/mpi-inv.c (_gcry_mpi_invm): Fix comments and use of CRT path.
+
+2020-04-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Fix off-by-one mistake mpi_invm_pow2.
+ + commit 3bb9f74764b3626ed1116fc7e517921232d6be54
+ * mpi/mpi-inv.c (mpi_invm_pow2): Fix computation of iterations.
+
+2020-04-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Use mpi_invm_pow2 for mpi_invm.
+ + commit bac01a6cfb3d645ff8439cbd3b310d255735d792
+ * mpi/mpi-inv.c (_gcry_mpi_invm): Use mpi_invm_pow2.
+
+ mpi: Fix mpi_invm_pow2.
+ + commit 2a3c58a0b4db01c17da0bf8c035fb1def2af114c
+ * mpi/mpi-inv.c (mpi_invm_pow2): Fix the algo implementation.
+
+2020-04-19 Dmitry Baryshkov <dbaryshkov@gmail.com>
+
+ gost28147: implement special MAC mode called imitovstavka (IMIT)
+ + commit 45f21f871982753716d4a7676d948e8c7d644db5
+ * src/gcrypt.h.in (GCRY_MAC_GOST28147_IMIT): New.
+ * cipher/gost28147.c (gost_imit_open, gost_imit_close)
+ (gost_imit_setkey, gost_imit_setiv, gost_imit_reset, _gost_imit_block)
+ (gost_imit_block, gost_imit_write, gost_imit_finish, gost_imit_read)
+ (gost_imit_verify, gost_imit_get_maclen, gost_imit_get_keylen)
+ (gost_imit_set_extra_info): New functions implementing GOST 28147-89
+ MAC (imitovstavka, IMIT) mode.
+ * cipher/gost28147.c (gost_imit_ops)
+ (_gcry_mac_type_spec_gost28147_imit): declare GOST 28147-89 IMIT
+ handler.
+ * cipher/mac-internal.h (gcry_mac_handle): add fields to support GOST
+ 28147-89 IMIT mode.
+ * cipher/mac.c (mac_list): add _gcry_mac_type_spec_gost28147_imit.
+ (spec_from_algo): handle GCRY_MAC_GOST28147_IMIT.
+ * tests/basic.c (check_mac): add GOST28147-89 IMIT test vector.
+
+ mac: add support for gcry_mac_ctl(GCRYCTL_SET_SBOX)
+ + commit d7fa70ed9ddc6e0189a8b59016b1f17717a26865
+ * cipher/mac-internal.h (gcry_mac_spec_ops_t): add set_extra_info field
+ for providing additional settings.
+ * cipher/mac.c (_gcry_mac_ctl): support GCRYCTL_SET_SBOX call.
+ * cipher/mac-cmac.c (cmac_ops): set set_extra_info to NULL.
+ * cipher/mac-gmac.c (gmac_ops): the same.
+ * cipher/mac-hmac.c (hmac_ops): the same.
+ * cipher/mac-poly1305.c (poly1305mac_ops): the same.
+
+2020-04-17 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Use mpi_invm_pow2 for N=2^k.
+ + commit 469e2fefb64e3a4bd80995935f82caf416e3a4ae
+ * mpi/mpi-inv.c (mpi_invm_pow2): Fix.
+ (_gcry_mpi_invm): Use mpi_invm_pow2.
+
+ mpi: Rewrite mpi_invm_odd into mpih_invm_odd.
+ + commit 05ceac8e2f6f28f97428c005d0a318d71d7cf9d9
+ * mpi/mpi-inv.c (mpih_invm_odd): Use mpi_ptr_t API.
+ (_gcry_mpi_invm): Use _gcry_mpih_mod and mpih_invm_odd.
+
+ mpi: Add _gcry_mpih_cmp_ui.
+ + commit 128045a12139fe2e4be877df59da10c7d4857d9a
+ * mpi/mpih-const-time.c (_gcry_mpih_cmp_ui): New.
+
+ mpi: Add internal functipn mpi_invm_pow2.
+ + commit 515bd6e9fae448e966f71e23635503716201158d
+ * mpi/mpi-inv.c (mpi_invm_pow2): New.
+
+2020-04-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Add mpi_set_bit_cond.
+ + commit a91bd0211c4e5f0ce575b3a63a36049dd9edbf90
+ * mpi/mpiutil.c (_gcry_mpi_set_bit_cond): New.
+ * src/mpi.h (mpi_set_bit_cond): New macro.
+ (_gcry_mpi_set_bit_cond): New.
+
+ mpi: Add _gcry_mpih_mod.
+ + commit 95bdfd9ce9e114f447f3639e551e8f4f63d024fe
+ * mpi/mpi-internal.h (mpih_mod, _gcry_mpih_mod): New.
+ * mpi/mpih-const-time.c (_gcry_mpih_mod): New.
+
+ mpih: Expose const-time MPI helper functions.
+ + commit 9b7e0d89006fce0641da05d8ef2696b1fb73145b
+ * mpi/Makefile.am (libmpi_la_SOURCES): Add mpih-const-time.c.
+ * mpi/ec.c (mpih_set_cond): Move to mpih-const-time.c.
+ * mpi/mpi-internal.h: Add macros and declarations.
+ * mpi/mpi-inv.c (mpih_add_n_cond): Likewise.
+ (mpih_sub_n_cond, mpih_swap_cond, mpih_abs_cond): Likewise.
+ * mpi/mpih-const-time.c: New.
+
+2020-04-14 Werner Koch <wk@gnupg.org>
+
+ sexp: Extend gcry_sexp_extract_param with a multi-string extractor.
+ + commit 32b08e38628b3ed409054db05a7f73b1ab86464a
+ * src/sexp.c (_gcry_sexp_vextract_param): Implement "%#s" control
+ sequence.
+
+2020-04-14 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Remove hard-coded value for ECC_DIALECT_ED25519.
+ + commit 0ff36e04f7cdef961610e7bc674a9c9ef0fd4853
+ * mpi/ec.c (ec_p_init): Remove special handling for Ed25519.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_encodepoint): Fix assumption
+ ec->nbits is 256 for EdDSA.
+ (_gcry_ecc_eddsa_decodepoint): Likewise.
+ (_gcry_ecc_eddsa_verify): Likewise.
+
+2020-04-09 Werner Koch <wk@gnupg.org>
+
+ sexp: Extend gcry_sexp_extract_param with new format specifiers.
+ + commit 60c179b59e538aebb3a5f7621d92eee60b90c785
+ * src/sexp.c (_gcry_sexp_vextract_param): Add new conversion methods.
+ * tests/t-sexp.c (check_extract_param): Add corresponding tests.
+
+2020-04-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ ppc: avoid using vec_vsx_ld/vec_vsx_st for 2x64-bit vectors.
+ + commit 1250a9cd859d99f487ca8d76a98d70d464324bbe
+ * cipher/crc-ppc.c (CRC_VEC_U64_LOAD, CRC_VEC_U64_LOAD_LE)
+ (CRC_VEC_U64_LOAD_BE): Remove vec_vsx_ld usage.
+ (asm_vec_u64_load, asm_vec_u64_load_le): New.
+ * cipher/sha512-ppc.c (vec_vshasigma_u64): Use '__asm__' instead of
+ 'asm' for assembly block.
+ (vec_u64_load, vec_u64_store): New.
+ (_gcry_sha512_transform_ppc8): Use vec_u64_load/store instead of
+ vec_vsx_ld/vec_vsx_st.
+ * configure.ac (gcy_cv_cc_ppc_altivec)
+ (gcy_cv_cc_ppc_altivec_cflags): Add check for vec_vsx_ld with
+ 'unsigned int *' pointer type.
+
+2020-04-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ asm-poly1305-aarch64: fix building with clang.
+ + commit 89b3ded8df969fe5fb31313c60419dd34d36b605
+ * cipher/asm-poly1305-aarch64.h (POLY1305_BLOCK_PART25): Use correct
+ instruction format for right-shifting.
+
+2020-03-31 Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+
+ libgcrypt.m4: Fix spelling.
+ + commit 6a5743469a4366b1e238d378e427442f04400950
+
+
+ libgcrypt.m4: Fix spelling.
+ + commit e16e7e619183f36720d17855419860d1dc6fe3a5
+
+
+2020-03-20 Dmitry Baryshkov <dbaryshkov@gmail.com>
+
+ tests/basic: add GOST 28147 keymeshing testcase from LibreSSL testsuite.
+ + commit 3441f4c94c49a589c5e323b1526d2d6b5974cf2f
+ * tests/basic.c (check_cfb_cipher): add check for GOST 28147 CFB with
+ KeyMeshing enabled.
+
+ gost28147: add support for CryptoPro key meshing per RFC 4357.
+ + commit dcee00adbd1c0a2cde1aeed1bb94421e81d0de3b
+ * cipher/gost28147.c (gost_do_set_sbox, cryptopro_key_meshing,
+ CryptoProMeshingKey, gost_encrypt_block_mesh): New.
+ (_gcry_cipher_spec_gost28147_mesh): New cipher with keymeshing,
+ (_gcry_cipher_spec_gost28147): Remove OIDs for this cipher should not
+ be selected using these OIDs (they are for CFB with keymeshing).
+
+ * cipher/cipher.c (cipher_list, cipher_list_algo301): add
+ _gcry_cipher_spec_gost28147_mesh.
+
+ * src/gcrypt.h.in (GCRY_CIPHER_GOST28147_MESH): New cipher with
+ keymeshing.
+
+ * doc/gcrypt.texi (GCRY_CIPHER_GOST28147_MESH): Add definition.
+
+ * tests/basic.c (check_gost28147_cipher, check_gost28147_cipher_basic):
+ Run basic tests on GCRY_CIPHER_GOST28147_MESH.
+
+ gost: add keymeshing support per RFC 4357.
+ + commit 18cd3f0c473ae909cdaa5a820faef50d7670fcbb
+ * cipher/gost-s-box.c (gost_sbox): define if keymeshing should be
+ enabled or not.
+ (main): output whether we should enable or disable keymeshing for a
+ particular parameters set.
+
+2020-03-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ DSA,ECDSA: Fix use of mpi_invm.
+ + commit ada758e3019c2585213a132960613b1ac48502b8
+ * cipher/dsa.c (sign): Call mpi_invm before _gcry_dsa_modify_k.
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Likewise.
+
+ mpi: Constant time mpi_inv with some conditions.
+ + commit 20082ca965eab5665af60956c4ed72709836b1ed
+ * mpi/mpi-inv.c (mpih_add_n_cond, mpih_sub_n_cond, mpih_swap_cond)
+ (mpih_abs_cond): New.
+ (mpi_invm_odd): New.
+ (mpi_invm_generic): Rename from _gcry_mpi_invm.
+ (_gcry_mpi_invm): Use mpi_invm_odd for usual odd cases.
+
+2020-03-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Support opaque MPI with gcry_mpi_print.
+ + commit b4b04ae6c2e55bc2b24efc663d1eeaa0b3613f4c
+ * mpi/mpicoder.c (_gcry_mpi_get_buffer): Return the bytes as-is.
+
+2020-03-09 Werner Koch <wk@gnupg.org>
+
+ mpi: Abort on division by zero also in _gcry_mpi_tdiv_qr.
+ + commit afbab896fa04d9481dbb9f4d01f607b12e31dcbf
+ * mpi/mpi-div.c (_gcry_mpi_tdiv_qr): Error out on division by zero.
+
+2020-02-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: More accurate dependency to -lgpg-error.
+ + commit 9b8ac13761f0407bd701e43b0a65fbada204958f
+ * configure.ac (LIBGCRYPT_CONFIG_LIBS): Remove DL_LIBS.
+ * src/libgcrypt.c.in: Distinguish static link use case.
+ * tests/Makefile.am: Fix use of -lgpg-error.
+
+ build: Fix linking -ldl.
+ + commit c21e5d72e24e62752559f92b1825287298ae2f03
+ * src/Makefile.am (libgcrypt_la_LIBADD): Add DL_LIBS.
+ (mpicalc_LDADD): Remove DL_LIBS.
+ * tests/Makefile.am (standard_ldadd): Remove DL_LIBS.
+
+2020-02-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ crc-ppc: fix bad register used for vector load/store assembly.
+ + commit b64b029318e7d0b66123015146614118f466a7a9
+ * cipher/crc-ppc.c (CRC_VEC_U64_LOAD_BE): Move implementation to...
+ (asm_vec_u64_load_be): ...here; Add "r0" to clobber list for load
+ instruction when offset is not zero; Add zero offset path.
+
+ rinjdael-aes: use zero offset vector load/store when possible.
+ + commit 89776d45c824032409f581e5fd1db6bf149df57f
+ * cipher/rijndael-ppc-common.h (asm_aligned_ld, asm_aligned_st): Use
+ zero offset instruction variant when input offset is constant zero.
+ * cipher/rijndael-ppc.c (asm_load_be_noswap)
+ (asm_store_be_noswap): Likewise.
+
+ Add POWER9 little-endian variant of PPC AES implementation.
+ + commit 114bbc45e9717f9ad9641f64d8df8690db8da434
+ * configure.ac: Add 'rijndael-ppc9le.lo'.
+ * cipher/Makefile.am: Add 'rijndael-ppc9le.c', 'rijndael-ppc-common.h'
+ and 'rijndael-ppc-functions.h'.
+ * cipher/rijndael-internal.h (USE_PPC_CRYPTO_WITH_PPC9LE): New.
+ (RIJNDAEL_context_s): Add 'use_ppc9le_crypto'.
+ * cipher/rijndael.c (_gcry_aes_ppc9le_encrypt)
+ (_gcry_aes_ppc9le_decrypt, _gcry_aes_ppc9le_cfb_enc)
+ (_gcry_aes_ppc9le_cfb_dec, _gcry_aes_ppc9le_ctr_enc)
+ (_gcry_aes_ppc9le_cbc_enc, _gcry_aes_ppc9le_cbc_dec)
+ (_gcry_aes_ppc9le_ocb_crypt, _gcry_aes_ppc9le_ocb_auth)
+ (_gcry_aes_ppc9le_xts_crypt): New.
+ (do_setkey, _gcry_aes_cfb_enc, _gcry_aes_cbc_enc)
+ (_gcry_aes_ctr_enc, _gcry_aes_cfb_dec, _gcry_aes_cbc_dec)
+ (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth, _gcry_aes_xts_crypt)
+ [USE_PPC_CRYPTO_WITH_PPC9LE]: New.
+ * cipher/rijndael-ppc.c: Split common code to headers
+ 'rijndael-ppc-common.h' and 'rijndael-ppc-functions.h'.
+ * cipher/rijndael-ppc-common.h: Split from 'rijndael-ppc.c'.
+ (asm_add_uint64, asm_sra_int64, asm_swap_uint64_halfs): New.
+ * cipher/rijndael-ppc-functions.h: Split from 'rijndael-ppc.c'.
+ (CFB_ENC_FUNC, CBC_ENC_FUNC): Unroll loop by 2.
+ (XTS_CRYPT_FUNC, GEN_TWEAK): Tweak generation without vperm
+ instruction.
+ * cipher/rijndael-ppc9le.c: New.
+
+ Add gcry_cipher_ctl command to allow weak keys in testing use-cases.
+ + commit 5beadf201312d0c649971b0c1d4c3827b434a0b5
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add
+ 'marks.allow_weak_key' flag.
+ * cipher/cipher.c (cipher_setkey): Do not handle weak key as error when
+ weak keys are allowed.
+ (cipher_reset): Preserve 'marks.allow_weak_key' flag on object reset.
+ (_gcry_cipher_ctl): Add handling for GCRYCTL_SET_ALLOW_WEAK_KEY.
+ * src/gcrypt.h.in (gcry_ctl_cmds): Add GCRYCTL_SET_ALLOW_WEAK_KEY.
+ * tests/basic.c (check_ecb_cipher): Add tests for weak key errors and
+ for GCRYCTL_SET_ALLOW_WEAK_KEY.
+
+2020-01-23 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Fix include of config.h.
+ + commit e0898d0628789414da23e0526c87df1885c8b3ae
+ * random/random-drbg.c: Include config.h earlier.
+
+2020-01-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ sexp: fix cast from 'int' pointer to 'size_t' pointer.
+ + commit 8b31091da092e22dba78b2402c2f436bbffc1c73
+ * src/sexp.c (do_vsexp_sscan): Change 'datalen' from 'int' to
+ 'size_t'; Remove &datalen pointer cast to 'size_t *' type.
+
+ mpi/i386: fix DWARF CFI for _gcry_mpih_sub_n and _gcry_mpih_add_n.
+ + commit 5f098f7e6ceb899ac27a0a30ee036de5f1be4e3d
+ * mpi/i386/mpih-add1.S (_gcry_mpih_add_n) [PIC]: Adjust CFI CFA offset
+ when making call and restoring stack pointer.
+ * mpi/i386/mpih-sub1.S (_gcry_mpih_sub_n) [PIC]: Ditto.
+
+2020-01-22 H.J. Lu <hjl.tools@gmail.com>
+
+ i386: Add _CET_ENDBR to indirect jump targets.
+ + commit cb9f0a2df8225eed071ae0a56265e38e9f6ff184
+ * mpi/i386/mpih-add1.S (_gcry_mpih_add_n): Save and restore
+ %ebx if IBT is enabed. Add _CET_ENDBR to indirect jump targets
+ and adjust jump destination for _CET_ENDBR.
+ * mpi/i386/mpih-sub1.S (_gcry_mpih_sub_n): Likewise.
+
+ amd64: Always include <config.h> in cipher assembly codes.
+ + commit 22e577071790834f07753c42a191a568c9f2644d
+ * cipher/camellia-aesni-avx-amd64.S: Always include <config.h>.
+ * cipher/camellia-aesni-avx2-amd64.S: Likewise.
+ * cipher/serpent-avx2-amd64.S: Likewise.
+
+ mpi: Add .note.gnu.property section for Intel CET.
+ + commit 24b4d5c10a97aaf82ac7402cc3a5b429d580cd66
+ * mpi/config.links: Include <cet.h> in <asm-syntax.h>.
+
+ x86: Add .note.gnu.property section for Intel CET.
+ + commit 4c88c2bd2a418435506325cd53246acaaa52750c
+ * configure.ac: Include <cet.h> in <config.h> for assembly
+ codes.
+
+2020-01-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/basic: add vector cluttering to detect implementation bugs.
+ + commit 4aa8ff904262f331abbb8c988069a7029ca13502
+ * src/global.c (_gcry_check_version): Fix missing newline.
+ * src/basic.c (ALWAYS_INLINE, CLUTTER_REGISTER_*, prepare_vector_data)
+ (clutter_vector_registers): New.
+ (progress_handler): Make static function.
+ (check_bulk_cipher_modes, check_one_cipher_core_reset)
+ (check_one_cipher_core, check_one_md, check_one_md_multi)
+ (check_one_md_final, check_one_mac): Clutter vector registers before
+ gcry_* calls to cipher/md/mac algorithms.
+
+2020-01-22 Marvin W <git@larma.de>
+
+ Set vZZ.16b register to zero before use in armv8 gcm implementation.
+ + commit 79ed620ec46adbb08f5cea6a4865a95a436e4109
+ * cipher/cipher-gcm-armv8-aarch64-ce.S
+ (_gcry_ghash_setup_armv8_ce_pmull): Set vZZ to zero.
+
+2020-01-21 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ tests: Add basic test cases for sm2.
+ + commit aa9c78afa1d867bb7b9b3c695cf31a832c9419e5
+ * tests/basic.c (check_pubkey): Add test cases for ecc-sm2.
+
+ Add elliptic curve SM2 implementation.
+ + commit 6b55246c77089dd372eb1807808111660fd789c7
+ * configure.ac (enabled_pubkey_ciphers): Add ecc-sm2.
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add ecc-sm2.c.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist,
+ _gcry_pk_util_preparse_sigval): Add sm2 flags.
+ * cipher/ecc.c: Support ecc-sm2.
+ * cipher/ecc-common.h: Add declarations for ecc-sm2.
+ * cipher/ecc-sm2.c: New.
+ * src/cipher.h: Define PUBKEY_FLAG_SM2.
+
+ ecc: Simplify signature code.
+ + commit 8d9958910e54f3fecbab6e133c3971843f6ef310
+ * cipher/ecc-gost.c (_gcry_ecc_gost_sign): Use implemented function.
+ * cipher/ecc.c (ecc_verify): Remove redundant code.
+
+2020-01-21 NIIBE Yutaka <gniibe@fsij.org>
+ NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Fix check_pubkey.
+ + commit 95e9cee802419adf6f4b01b29d7874793004fa8d
+ * tests/basic.c (check_pubkey): Fix constants of pubkeys.
+
+2020-01-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ Avoid use of ulong in internal code.
+ + commit 4997139b3e83761c9af0246cec829305c3d7d13b
+ * configure.ac (HAVE_ULONG_TYPEDEF): Remove.
+ * mpi/mpi-div.c (_gcry_mpi_fdiv_r_ui): Use unsigned long.
+ (_gcry_mpi_divisible_ui): Likewise.
+ * random/rndunix.c (_gcry_rndunix_gather_random): Likewise.
+ * random/rndw32.c (_gcry_rndw32_gather_random_fast): Likewise.
+ (ADDINT): Likewise.
+ * random/rndw32ce.c (_gcry_rndw32ce_gather_random_fast): Likewise.
+ * src/mpi.h: Follow the change.
+ * src/types.h (HAVE_ULONG_TYPEDEF): Remove.
+
+2020-01-19 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ gcrypt.texi: fix GCRYCTL_GET_ALGO_NENCR typo.
+ + commit 5ebb2f0671c902863eee91cbcfc85a72be506410
+ * doc/gcrypt.texi: Fix GCRYCTL_GET_ALGO_NENC to GCRYCTL_GET_ALGO_NENCR.
+
+2020-01-19 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ mpi: Fix error that point not uninitialized.
+ + commit 7e3aac7ba49b3b6e6c5ebe7c880b5b323c423ef7
+ * cipher/ecc-curves.c (mpi_ec_get_elliptic_curve): Initialize E->G poing
+
+ ecc: Wrong flag and elements_enc fix.
+ + commit 43cfc1632dd3a9579a906f31cd3b6c88d242d1a5
+ * cipher/ecc.c (ecc_generate): Fix wrong flag and elements_enc.
+
+ Update .gitignore.
+ + commit 176a5f162acd0cfebc5517d061205681bc3658d0
+
+
+2020-01-16 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
+
+ Add new curve named sm2p256v1.
+ + commit d154c1e9e11019980253f0a65758932cd0656470
+ * cipher/ecc-curves.c (domain_parms): Add sm2p256v1 for SM2.
+ * tests/curves.c (N_CURVES): Update N_CURVES for SM2.
+
+2019-12-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-ppc: performance improvements.
+ + commit 110077505acacae62cec3d09b32a084b9cee0368
+ * cipher/rijndael-ppc.c (ALIGNED_LOAD, ALIGNED_STORE, VEC_LOAD_BE)
+ (VEC_STORE_BE): Rewrite.
+ (VEC_BE_SWAP, VEC_LOAD_BE_NOSWAP, VEC_STORE_BE_NOSWAP): New.
+ (PRELOAD_ROUND_KEYS, AES_ENCRYPT, AES_DECRYPT): Adjust to new
+ input parameters for vector load macros.
+ (ROUND_KEY_VARIABLES_ALL, PRELOAD_ROUND_KEYS_ALL)
+ (AES_ENCRYPT_ALL): New.
+ (vec_bswap32_const_neg): New.
+ (vec_aligned_ld, vec_aligned_st, vec_load_be_const): Rename to...
+ (asm_aligned_ls, asm_aligned_st, asm_load_be_const): ...these.
+ (asm_be_swap, asm_vperm1, asm_load_be_noswap)
+ (asm_store_be_noswap): New.
+ (vec_add_uint128): Rename to...
+ (asm_add_uint128): ...this.
+ (asm_xor, asm_cipher_be, asm_cipherlast_be, asm_ncipher_be)
+ (asm_ncipherlast_be): New inline assembly functions with volatile
+ keyword to allow manual instruction ordering.
+ (_gcry_aes_ppc8_setkey, aes_ppc8_prepare_decryption)
+ (_gcry_aes_ppc8_encrypt, _gcry_aes_ppc8_decrypt)
+ (_gcry_aes_ppc8_cfb_enc, _gcry_aes_ppc8_cbc_enc)
+ (_gcry_aes_ppc8_ocb_auth): Update to use new&rewritten helper macros.
+ (_gcry_aes_ppc8_cfb_dec, _gcry_aes_ppc8_cbc_dec)
+ (_gcry_aes_ppc8_ctr_enc, _gcry_aes_ppc8_ocb_crypt)
+ (_gcry_aes_ppc8_xts_crypt): Update to use new&rewritten helper
+ macros; Tune 8-block parallel paths with manual instruction ordering.
+
+ rijndael-ppc: fix bad register used for vector load/store assembly.
+ + commit 0837d7e6be3e604c1f7b86d18c582d8aa7ed858c
+ * cipher/rijndael-ppc.c (vec_aligned_ld, vec_load_be, vec_aligned_st)
+ (vec_store_be): Add "r0" to clobber list for load/store instructions.
+
+2019-12-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cipher: fix typo in error log.
+ + commit 5b9ea3df0dc355d77b9f061f63064614a97b8b67
+ * cipher/cipher.c (_gcry_cipher_encrypt): Fix log "cipher_decrypt: ..."
+ to "cipher_encrypt: ...".
+
+2019-11-21 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ gost28147: inline gost_val function to speed up code.
+ + commit e5c4cf0efb8fd297963e6b4392ab98c41dbad536
+ * cipher/gost28147.c (gost_val): mark function as inline
+
+ gost28147: do not use GOST28147_CONTEXT outside of GOST 28147 calculation
+ + commit f9894240bed36eab17fabf5aa482799b148618e2
+ * cipher/gost28147.c (_gcry_gost_enc_data): remove unused context
+ argument
+ * cipher/gostr3411-94.c (GOSTR3411_CONTEXT, gostr3411_init,
+ do_hash_step): remove unused GOST 28147-89 context.
+
+ gost28147: simplify internal code.
+ + commit d164a8e7f6829163f1279517f07b61805311f8f2
+ * cipher/gost28147.c (gost_val, _gost_encrypt_data): don't use gost
+ context internally
+ * cipher/gost28147.c (gost_encrypt_block, gost_decrypt_block,
+ _gcry_gost_enc_data): adapt to internal changes.
+
+ gostr3411-94: small speedup.
+ + commit 8f573a67d12e6d9026f1676a6dae7813105bc490
+ * cipher/gostr3411-94.c (do_p): unroll loop for a small spedup
+
+2019-11-18 Paul Wolneykien <manowar@altlinux.org>
+
+ ecc: update GOST2012 curves.
+ + commit a3a866f63e7a527fe3c053758b84d70c142f8283
+ * cipher/ecc-curves.c (domain_parms): rename GOST 2012 curves to contain
+ curve bit size
+ (curve_aliases): rename curves, provide backwards-compatible
+ aliases, add new OIDs and two new curves.
+ * cipher/ecc-curves.c (curve_aliases): add new OIDs and aliases for
+ * tests/basic.c (check_pubkey): use new name for GOST2012 512-bit test
+ curve.
+ * tests/benchmark.c (ecc_bench): use new name for GOST2012 512-bit test
+ curve.
+
+2019-11-05 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ ec: fix left shift overflows on WIN64 build.
+ + commit bdbd032d1626dbb34e1840e5f5393524dd546a1d
+ * mpi/ec.c (ec_mulm_448): Cast constants to (mpi_limb_t) before
+ shifting left by 32.
+
+ mpi/amd64: use SSE2 for shifting instead of MMX.
+ + commit 1322c6a5d1e9aa0c69a2b259aa5ec7bcf5cb5653
+ * mpi/amd64/mpih-lshift.S: Convert to SSE2.
+ * mpi/amd64/mpih-rshift.S: Ditto.
+
+ Add i386/SSSE3 implementation of SHA512.
+ + commit b52dde860963c794b12d14b0a9c5848bca7ba51e
+ * LICENSES: Add 'sha512-ssse3-i386.c'.
+ * configure.ac: Add 'sha512-ssse3-i386.lo'.
+ * cipher/Makefile.am: Add 'sha512-ssse3-i386.c'.
+ * cipher/sha512-ssse3-i386.c: New.
+ * cipher/sha512.c (USE_SSSE3_I386, _gcry_sha512_transform_i386_ssse3)
+ (do_sha512_transform_i386_ssse3): New.
+ (_gcry_sha512_transform_arm) [USE_SSSE3_I386]: Use i386/SSSE3 transform
+ function if supported by CPU.
+
+2019-10-28 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Add Curve for X448 with ECC_DIALECT_SAFECURVE.
+ + commit d9c418305e1053decebefbd5a98a95f845404a09
+ * cipher/ecc-curves.c (domain_parms): Add X448.
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Support X448.
+ * mpi/ec.c (ec_addm_448, ec_subm_448, ec_mulm_448): New.
+ (ec_mul2_448, ec_pow2_448): New.
+ (field_table): Add for X448.
+ (curve448_bad_points): New.
+ (bad_points_table): New.
+ (ec_p_init): Use bad_points_table.
+ * tests/Makefile.am (t-x448): Add.
+ * tests/curves.c (N_CURVES): Update.
+ * tests/t-x448.c: New.
+
+2019-10-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Introduce new dialect: ECC_DIALECT_SAFECURVE.
+ + commit 498ab6d9f2f8b0775da41553be7868e59cf4cc2e
+ * src/mpi.h (ECC_DIALECT_SAFECURVE): New.
+ * cipher/ecc-misc.c (_gcry_ecc_dialect2str): Support the new dialect.
+ * cipher/ecc-curves.c (mpi_ec_setup_elliptic_curve): Support opaque
+ MPI handling of secret 'd' for ECC_DIALECT_SAFECURVE.
+ * cipher/ecc.c (nist_generate_key): Support opaque secret for
+ ECC_DIALECT_SAFECURVE.
+ (test_ecdh_only_keys): Likewise.
+ (ecc_generate): Support native point representation for
+ ECC_DIALECT_SAFECURVE.
+ (ecc_encrypt_raw): Support opaque MPI handling of secret and
+ native point representation for ECC_DIALECT_SAFECURVE.
+ (ecc_decrypt_raw): Support native point representation for
+ ECC_DIALECT_SAFECURVE.
+ (_gcry_pk_ecc_get_sexp): Likewise.
+
+ ecc: Make _gcry_mpi_ec_mul_point friendly to X25519 computation.
+ + commit 2dfedafe08ac57a87e6892d1af4d72cbb398fe40
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Support scalar input as an opaque
+ MPI in little-endian native format.
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Use an opaque scalar.
+
+ pubkey: Support a method to get data as an opaque MPI.
+ + commit 050e0b4accfae6a49dda6b1bac52749edec5ce22
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Support an
+ opaque MPI in old style.
+
+2019-10-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Support an opaque MPI handling in mpi_from_keyparam.
+ + commit 05a7d2f262bc5c2d108dcfa6e3d907dd895a4074
+ * cipher/ecc-curves.c (mpi_from_keyparam): Add OPAQUE argument.
+
+ ecc: Fix handling of point representation in EdDSA.
+ + commit 3d5a05767b84e0f781ed5dfe434adb4d4e9d2aa5
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_ensure_compact): Use
+ GCRYMPI_FMT_USG, since integer is defined as unsigned in SEC1.
+ (_gcry_ecc_eddsa_decodepoint): Likewise.
+
+ ecc: Return an opaque MPI by _gcry_ecc_ec2os.
+ + commit 8fce1027c2531127dd52a8b883f34333ffd3763b
+ * cipher/ecc-misc.c (_gcry_ecc_ec2os): Use mpi_set_opaque instead of
+ _gcry_mpi_scan to make an opaque MPI.
+
+ ecc: String constant fix.
+ + commit 35c1faaea2b0aee9b127d02d93158826d17eb107
+ * cipher/ecc-curves.c (domain_parms): Same string length for NIST
+ P-521.
+
+ ecc: Simplify _gcry_ecc_compute_public.
+ + commit ad8927f40169364003f72fc188ea60b295ef5e59
+ * cipher/ecc-misc.c (_gcry_ecc_compute_public): Don't need G and d.
+ Use ec->G and ec->d.
+ * cipher/ecc-curves.c (_gcry_ecc_get_mpi): Follow the change.
+ (_gcry_ecc_get_point): Likewise.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_compute_h_d): Don't need d,
+ but use ec->d.
+ (_gcry_ecc_eddsa_sign): Follow the change.
+
+2019-10-23 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Use opaque MPI for _gcry_ecc_mul_point.
+ + commit c5a7191c1bd18292a34ad4da45d743dfac035f9a
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Use opaque MPI for U.
+
+ ecc: Fix _gcry_ecc_mont_decodepoint for data by old implementation.
+ + commit bbe15758c893dbf546416c1a6bccdad1ab000ad7
+ * cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): Support data by old
+ implementation by opaque public key.
+ Fix confusion of endian, in the handling of data by normal MPI key.
+
+ ecc: ECDH clean up for use of ec->nbits.
+ + commit 27e848666b4a03939b0c8db15aa6e6f79bc7db30
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Use ec->nbits.
+ * cipher/ecc.c (test_ecdh_only_keys): Likewise.
+ (ecc_encrypt_raw): Likewise.
+ (ecc_generate): Fix debug output format.
+
+2019-10-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix key generation for ECDH.
+ + commit 82441bbb82903c21cd2b9b4e2d50202b14fdc24c
+ * cipher/ecc.c (test_ecdh_only_keys): Don't free EC here.
+
+ ecc: Fix debug output.
+ + commit 6d93812aa312a92d4de2dc034bdf87c276a24b8a
+ * cipher/ecc-curves.c (_gcry_mpi_ec_internal_new): Fix debug output.
+
+ ecc: Simplify using mpi_ec_t directly.
+ + commit 6a30a9a2cc48d2343c3e9815567dbd4bf9eec058
+ * cipher/ecc-common.h (ECC_public_key, ECC_secret_key): Remove.
+ (_gcry_ecc_ecdsa_sign, _gcry_ecc_ecdsa_verify): Use mpi_ec_t.
+ (_gcry_ecc_eddsa_genkey, gcry_ecc_eddsa_sign): Likewise.
+ (_gcry_ecc_eddsa_verify): Likewise.
+ (_gcry_ecc_gost_sign, _gcry_ecc_gost_verify): Likewise.
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Use mpi_ec_t directly.
+ (_gcry_ecc_ecdsa_verify): Likewise.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Likewise.
+ (_gcry_ecc_eddsa_sign, _gcry_ecc_eddsa_verify): Likewise.
+ * cipher/ecc-gost.c (_gcry_ecc_gost_sign): Likewise.
+ (_gcry_ecc_gost_verify): Likewise.
+
+ ecc: Fix for NBITS support.
+ + commit 975de38796917392e83152447c6575648a5a5ee3
+ * cipher/ecc-curves.c (mpi_ec_get_elliptic_curve): Fill curve
+ parameters by NBITS.
+ (_gcry_mpi_ec_internal_new): Show "EdDSA".
+
+ ecc: Add NAME member to struct mpi_ec_ctx_s.
+ + commit e921ad5b3ad093304312aca90a3c971de05cbf03
+ * src/ec-context.h (struct mpi_ec_ctx_s): Add NAME.
+ * cipher/ecc-curves.c (mpi_ec_setup_elliptic_curve): Initialize NAME.
+
+ ecc: Add key generation support to mpi_ec_get_elliptic_curve.
+ + commit 488704be6e044e23770d95344511c5a347b533c5
+ * cipher/ecc-curves.c (mpi_ec_get_elliptic_curve): Handle params for
+ key generation.
+ (_gcry_mpi_ec_internal_new): Remove duplication for handling of flags.
+
+ ecc: Consolidate with _gcry_mpi_ec_internal_new.
+ + commit 5415bc578080018e1cd36aa44cf5c0a9995cbafc
+ * cipher/ecc-ecdh.c (prepare_ec): Use _gcry_mpi_ec_internal_new.
+ (_gcry_ecc_mul_point): Don't need to have E of elliptic_curve_t.
+ * cipher/ecc.c (ecc_encrypt_raw): Use _gcry_mpi_ec_internal_new.
+ (ecc_decrypt_raw): Likewise.
+
+ ecc: Support flags and debug print in _gcry_mpi_ec_internal_new.
+ + commit c2aa333dd88b4cd337329128a2018dd3b00f5114
+ * cipher/ecc-curves.c (mpi_ec_get_elliptic_curve): Don't set *r_flags.
+ (_gcry_mpi_ec_internal_new): Add r_flags argument.
+ Parse the flag list.
+ Output to debug channel when DBG_CIPHER.
+
+2019-10-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Add new function _gcry_mpi_ec_internal_new.
+ + commit c7b97ac9bdf96f5a89ae553cac12954043ab174d
+ * cipher/ecc-curves.c (mpi_ec_get_elliptic_curve)
+ (mpi_ec_setup_elliptic_curve): Factor out from _gcry_mpi_ec_new.
+ (_gcry_mpi_ec_internal_new): New.
+ (_gcry_mpi_ec_new): Rewrite using mpi_ec_get_elliptic_curve and
+ mpi_ec_setup_elliptic_curve.
+
+ ecc: Simplify ecc_encrypt_raw and ecc_decrypt_raw.
+ + commit 10b8cc280a535f14b017106c87f2b26bb68d9489
+ * cipher/ecc.c (ecc_encrypt_raw): Use elliptic_curve_t directly.
+ (ecc_decrypt_raw): Likewise.
+
+ ecc: More fixes for cofactor with PUBKEY_FLAG_PARAM.
+ + commit 61a0518282537ad52367354c96986c3d1b698d6f
+ * cipher/ecc.c (ecc_check_secret_key): Support "h" in KEYPARMS.
+ (ecc_sign, ecc_verify, ecc_encrypt_raw, ecc_decrypt_raw): Likewise.
+
+ ecc: Simply use unsigned int for cofactor, not MPI.
+ + commit a258ae728de62607b3ef4eca940cfbcf9965fa5f
+ * cipher/ecc-common.h (elliptic_curve_t): Use unsigned int for H.
+ * src/ec-context.h (struct mpi_ec_ctx_s): Ditto.
+ * cipher/ecc-curves.c (ecc_domain_parms_t): Ditto.
+ (domain_parms): Update for the cofactors.
+ (_gcry_ecc_fill_in_curve): H is no longer MPI, but unsigned int.
+ (_gcry_ecc_get_curve): Remove handling for H.
+ (_gcry_mpi_ec_new): In KEYPARM, cofactor is still MPI.
+ (_gcry_ecc_get_param_sexp): H is no longer MPI, but unsigned int.
+ (_gcry_ecc_get_mpi): Keep the API, returning MPI for "h".
+ (_gcry_ecc_set_mpi): Likewise.
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Fix for unsigned int.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Likewise.
+ * cipher/ecc-misc.c (_gcry_ecc_curve_free): Likewise.
+ * cipher/ecc.c (nist_generate_key, test_ecdh_only_keys): Likewise.
+ (test_ecdh_only_keys, ecc_generate, ecc_check_secret_key): Likewise.
+ (ecc_sign, ecc_verify, ecc_encrypt_raw, ecc_decrypt_raw): Likewise.
+ (_gcry_pk_ecc_get_sexp): Likewise.
+ * mpi/ec.c (ec_deinit): Likewise.
+
+2019-10-18 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Simplify compute_keygrip.
+ + commit 579d5d6017d63b5eabec588b24d1a22566455bac
+ * cipher/ecc-curves.c (_gcry_ecc_update_curve_param): Remove H.
+ * cipher/ecc.c (compute_keygrip): Don't get H, since it's not
+ used in the computation.
+
+ ecc: Clean up key generation code.
+ + commit 95cc9b8f4483fd7edfc7555199f6a05cfa68a236
+ * cipher/ecc.c (test_ecdh_only_keys): No need to make PK by SK.
+
+2019-10-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix building t-lock for WIN32.
+ + commit 7e1383cfd43fdc2b6f743e6a1304f0f0b2142847
+ * tests/t-lock.c (external_lock_test_init, external_lock_test_lock)
+ (externel_lock_test_unlock, external_lock_test_destroy)
+ (nonce_thread, get_rand, pick_account, pick_value, revision_thread)
+ (accountant_thread): Build also if _WIN32 defined in addition to
+ HAVE_PTHREAD.
+
+ hash-common: avoid integer division to reduce call overhead.
+ + commit f9d8b5a0369cc94e125d36d9c8864d5cd2eaa1d2
+ * cipher/hash-common.h (gcry_md_block_ctx): Replace 'blocksize' with
+ 'blocksize_shift'.
+ * cipher/hash-common.c (_gcry_md_block_write): Use bit-level operations
+ instead of division to get number of blocks.
+ * cipher/gostr2411-94.c (gost3411_init): Initialize 'blocksize_shift'
+ instead of 'blocksize'.
+ * cipher/md2.c (md2_init): Ditto.
+ * cipher/md4.c (md4_init): Ditto.
+ * cipher/md5.c (md5_init): Ditto.
+ * cipher/rmd160.c (rmd160_init): Ditto.
+ * cipher/sha1.c (sha1_init): Ditto.
+ * cipher/sha256.c (sha256_common_init): Ditto.
+ * cipher/sha512.c (sha512_init_common): Ditto.
+ * cipher/sm3.c (sm3_init): Ditto.
+ * cipher/stribog.c (stribog_init_512): Ditto.
+ * cipher/tiger.c (do_init): Ditto.
+ * cipher/whirlpool.c (whirlpool_init): Ditto.
+
+2019-10-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Handle ephemeral key as opaque octets.
+ + commit ff0f1782560eb45458d9a8dd97088dabeddb34e7
+ * cipher/ecc.c (ecc_decrypt_raw): Extract an ephemeral key
+ as opaque octets.
+
+2019-10-10 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Consolidate encoding a point for Montgomery curve.
+ + commit 80cf289905ace9f174eb06d7f55f38980f7e4dbd
+ * cipher/ecc-common.h (_gcry_ecc_mont_encodepoint): New.
+ * cipher/ecc-misc.c (_gcry_ecc_mont_encodepoint): New.
+ * cipher/ecc.c (ecc_generate): Use _gcry_ecc_mont_encodepoint.
+ (ecc_encrypt_raw, ecc_decrypt_raw, _gcry_pk_ecc_get_sexp): Likewise.
+
+2019-10-09 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: More clean-up for Ed25519 and Curve25519.
+ + commit ba0b31f2636632b1b39ebd2202de3ba5d60588b8
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_ensure_compact): Fix calc for
+ bytes.
+ * cipher/ecc.c (ecc_encrypt_raw): Use public key as opaque byte-string
+ with "/q" for both cases, since it is always fixed size with a prefix.
+ (compute_keygrip): Likewise.
+ Fix hard-coded value of 256 for Ed25519.
+ Handle Curve25519 differently.
+
+2019-10-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix hard-coded value for 25519 to allow other modern curves.
+ + commit d66a4856eb0c39823bf3414b3ca4cf6322f32aef
+ * cipher/ecc.c (nist_generate_key): Support other modern curves.
+ (test_ecdh_only_keys): Likewise.
+ (check_secret_key): Don't use ECC_DIALECT_ED25519 for the check.
+ (_gcry_pk_ecc_get_sexp): Support Montgomery curve.
+
+ ecc: Clean up for decoding point.
+ + commit 254c5279058f0aea2d3568d6e756002242e82f8f
+ * cipher/ecc-curves.c (point_from_keyparam): Possibly supporting
+ Montgomery curve, use _gcry_mpi_ec_decode_point.
+ (_gcry_ecc_set_mpi): Likewise.
+ * cipher/ecc.c (ecc_check_secret_key): Likewise.
+
+ random: Clean up unused old internal API.
+ + commit 6e57242c61bca38b3cc8fdf424b5667ab953e4cd
+ * random/random.h (_gcry_get_random_bits): Remove.
+
+2019-10-02 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix regression in keygrip computation for cv25519 (2).
+ + commit 1cfe2329b91cc7be30f7c3a14fc634ec89a1be96
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Recover g_y
+ for Curve25519.
+
+2019-09-28 Werner Koch <wk@gnupg.org>
+
+ ecc: Fix regression in keygrip computation for cv25519.
+ + commit f67b6492e0b0a2a661cd53a08b20f23e6e3f9f89
+ * cipher/ecc-curves.c (domain_parms): Revert g_y for cv25519.
+ * tests/keygrip.c: Add test case for cv25519.
+
+2019-09-24 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add stitched ChaCha20-Poly1305 ARMv8/AArch64 implementation.
+ + commit 4bebafb7bae8343f543728937caf7d3453c88b7c
+ * cipher/Makefile.am: Add 'asm-poly1305-aarch64.h'.
+ * cipher/asm-poly1305-aarch64.h: New.
+ * cipher/chacha20-aarch64.S (ROT8, _, ROTATE2_8): New.
+ (ROTATE2): Add interleave operator.
+ (QUARTERROUND2): Add interleave operators; Use ROTATE2_8.
+ (chacha20_data): Rename to...
+ (_gcry_chacha20_aarch64_blocks4_data_inc_counter): ...to this.
+ (_gcry_chacha20_aarch64_blocks4_data_rot8): New.
+ (_gcry_chacha20_aarch64_blocks4): Preload ROT8; Fill empty parameters
+ for QUARTERROUND2 interleave operators.
+ (_gcry_chacha20_poly1305_aarch64_blocks4): New.
+ * cipher/chacha20.c
+ [USE_AARCH64_SIMD] (_gcry_chacha20_poly1305_aarch64_blocks4): New.
+ (_gcry_chacha20_poly1305_encrypt, _gcry_chacha20_poly1305_decrypt)
+ [USE_AARCH64_SIMD]: Use stitched implementation if ctr->use_neon is
+ set.
+
+2019-09-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Small tweak for PowerPC Chacha20-Poly1305 round loop.
+ + commit 96b91e164160dfbd913aefe258f472d386f5b642
+ * cipher/chacha20-ppc.c (_gcry_chacha20_poly1305_ppc8_block4): Use
+ inner/outer round loop structure instead of two separate loops for
+ stitched and non-stitched parts.
+
+ Reduce size of x86-64 stitched Chacha20-Poly1305 implementations.
+ + commit 664370ea02df883d16db1ffdd9ada023335b0f63
+ * cipher/chacha20-amd64-avx2.c
+ (_gcry_chacha20_poly1305_amd64_avx2_blocks8): De-unroll round loop.
+ * cipher/chacha20-amd64-ssse3.c
+ (_gcry_chacha20_poly1305_amd64_ssse3_blocks4):
+ (_gcry_chacha20_poly1305_amd64_ssse3_blocks1): Ditto.
+
+2019-09-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add PowerPC extra CFLAGS also for chacha20-ppc and crc-ppc.
+ + commit 5516072451d46be8827455afff840eb6d49155fb
+ * cipher/Makefile.am: Add 'ppc_vcrypto_cflags' for chacha20-ppc.o/.lo
+ and crc-ppc.o/.lo.
+
+2019-09-15 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add PowerPC vpmsum implementation of CRC.
+ + commit 0486b85bd1fb65013e77f858cae9ea4530f868df
+ * cipher/Makefile.am: Add 'crc-ppc.c'.
+ * cipher/crc-armv8-ce.c: Remove 'USE_INTEL_PCLMUL' comment.
+ * cipher/crc-ppc.c: New.
+ * cipher/crc.c (USE_PPC_VPMSUM): New.
+ (CRC_CONTEXT): Add 'use_vpmsum'.
+ (_gcry_crc32_ppc8_vpmsum, _gcry_crc24rfc2440_ppc8_vpmsum): New.
+ (crc32_init, crc24rfc2440_init): Add HWF check for 'use_vpmsum'.
+ (crc32_write, crc24rfc2440_write): Add 'use_vpmsum' code-path.
+ * configure.ac: Add 'vpmsumd' instruction to PowerPC VSX inline
+ assembly check; Add 'crc-ppc.lo'.
+
+ Add PowerPC vector implementation of ChaCha20.
+ + commit 557702f0d53a7ad1cf2ce0333c9df799a8abad59
+ * cipher/Makefile.am: Add 'chacha20-ppc.c'.
+ * cipher/chacha20-ppc.c: New.
+ * cipher/chacha20.c (USE_PPC_VEC, _gcry_chacha20_ppc8_blocks4)
+ (_gcry_chacha20_ppc8_blocks1, USE_PPC_VEC_POLY1305)
+ (_gcry_chacha20_poly1305_ppc8_blocks4): New.
+ (CHACHA20_context_t): Add 'use_ppc'.
+ (chacha20_blocks, chacha20_keysetup)
+ (do_chacha20_encrypt_stream_tail): Add USE_PPC_VEC code.
+ (_gcry_chacha20_poly1305_encrypt, _gcry_chacha20_poly1305_decrypt): Add
+ USE_PPC_VEC_POLY1305 code.
+ * configure.ac: Add 'chacha20-ppc.lo'.
+ * src/g10lib.h (HWF_PPC_ARCH_2_07): New.
+ * src/hwf-ppc.c (PPC_FEATURE2_ARCH_2_07): New.
+ (ppc_features): Add HWF_PPC_ARCH_2_07.
+ * src/hwfeatures.c (hwflist): Add 'ppc-arch_2_07'.
+
+2019-09-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ poly1305: add fast addition macro for ppc64.
+ + commit 0564757b934d24c7fef10df8594099985fbbc0ac
+ * cipher/poly1305.c [USE_MPI_64BIT && __powerpc__] (ADD_1305_64): New.
+
+2019-09-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add SHA-512 implementations for POWER8 and POWER9.
+ + commit 93632f1adf57f142e5d9e9653c405f2ca8c601c0
+ * cipher/Makefile.am: Add 'sha512-ppc.c'; Add extra CFLAG handling for
+ 'sha512-ppc.c'.
+ * cipher/sha512-ppc.c: New.
+ * cipher/sha512.c (USE_PPC_CRYPTO, _gcry_sha512_transform_ppc8)
+ (_gcry_sha512_transform_ppc9, do_sha512_transform_ppc8)
+ (do_sha512_transform_ppc9): New.
+ (sha512_init_common): Add PowerPC HW feature detection and
+ implementation selection.
+ * configure.ac: Add 'vshasigmad' instruction to PowerPC assembly
+ support check; Add 'sha512-ppc.lo'.
+
+2019-08-31 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add SHA-256 implementations for POWER8 and POWER9.
+ + commit e19dc973bc8e2a0ce92dd87515df3ee338265a8d
+ * cipher/Makefile.am: Add 'sha256-ppc.c'; Add extra CFLAG handling for
+ 'sha256-ppc.c'.
+ * cipher/sha256-ppc.c: New.
+ * cipher/sha256.c (USE_PPC_CRYPTO, _gcry_sha256_transform_ppc8)
+ (_gcry_sha256_transform_ppc9, do_sha256_transform_ppc8)
+ (do_sha256_transform_ppc9): New.
+ (sha256_init, sha224_init): Split common part to new function named...
+ (sha256_common_init): ...this; Add PowerPC HW feature detection and
+ implementation selection.
+ * configure.ac: Add 'vshasigmaw' instruction to PowerPC assembly
+ support check; Add 'sha256-ppc.lo'.
+
+2019-08-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ hwf-ppc: add detection for PowerISA 3.00.
+ + commit 418179593080f3028426657c4ef1941cdad85513
+ * src/g10lib.h (HWF_PPC_ARCH_3_00): New.
+ * src/hwf-ppc.c (feature_map_s): Remove unused 'feature_match'.
+ (PPC_FEATURE2_ARCH_3_00): New.
+ (ppc_features, get_hwcap): Add PowerISA 3.00.
+ * src/hwfeatures.c (hwflist): Rename "ppc-crypto" to "ppc-vcrypto"; Add
+ "ppc-arch_3_00".
+
+ rijndael-ppc: add bulk modes for CBC, CFB, CTR and XTS.
+ + commit 81d555d3473016eb9382fb1df153ba1effbbe32e
+ * cipher/rijndael-ppc.c (vec_add_uint128, _gcry_aes_ppc8_cfb_enc)
+ (_gcry_aes_ppc8_cfb_dec, _gcry_aes_ppc8_cbc_enc)
+ (_gcry_aes_ppc8_cbc_dec, _gcry_aes_ppc8_ctr_enc)
+ (_gcry_aes_ppc8_xts_crypt): New.
+ * cipher/rijndael.c [USE_PPC_CRYPTO] (_gcry_aes_ppc8_cfb_enc)
+ (_gcry_aes_ppc8_cfb_dec, _gcry_aes_ppc8_cbc_enc)
+ (_gcry_aes_ppc8_cbc_dec, _gcry_aes_ppc8_ctr_enc)
+ (_gcry_aes_ppc8_xts_crypt): New.
+ (do_setkey, _gcry_aes_cfb_enc, _gcry_aes_cfb_dec, _gcry_aes_cbc_enc)
+ (_gcry_aes_cbc_dec, _gcry_aes_ctr_enc)
+ (_gcry_aes_xts_crypto) [USE_PPC_CRYPTO]: Enable PowerPC AES
+ CFB/CBC/CTR/XTS bulk implementations.
+ * configure.ac (gcry_cv_gcc_inline_asm_ppc_altivec): Add 'vadduwm'
+ instruction.
+
+ rijndael-ppc: add bulk mode for ocb_auth.
+ + commit bd1367bb607846d582ad09ded6c4ce4be4e52778
+ * cipher/rijndael-ppc.c (_gcry_aes_ppc8_ocb_auth): New.
+ * cipher/rijndael.c [USE_PPC_CRYPTO] (_gcry_aes_ppc8_ocb_auth): New
+ prototype.
+ (do_setkey, _gcry_aes_ocb_auth) [USE_PPC_CRYPTO]: Add PowerPC AES
+ ocb_auth.
+
+ rijndael-ppc: enable PowerPC AES-OCB implemention.
+ + commit 821602c60c7d144c978c335f91ae1641cf668df5
+ * cipher/rijndael-ppc.c (ROUND_KEY_VARIABLES, PRELOAD_ROUND_KEYS)
+ (AES_ENCRYPT, AES_DECRYPT): New.
+ (_gcry_aes_ppc8_prepare_decryption): Rename to...
+ (aes_ppc8_prepare_decryption): ... this.
+ (_gcry_aes_ppc8_prepare_decryption): New.
+ (aes_ppc8_encrypt_altivec, aes_ppc8_decrypt_altivec): Remove.
+ (_gcry_aes_ppc8_encrypt): Use AES_ENCRYPT macro.
+ (_gcry_aes_ppc8_decrypt): Use AES_DECRYPT macro.
+ (_gcry_aes_ppc8_ocb_crypt): Uncomment; Optimizations for OCB offset
+ calculations, etc; Use new load/store and encryption/decryption macros.
+ * cipher/rijndaelc [USE_PPC_CRYPTO] (_gcry_aes_ppc8_ocb_crypt): New
+ prototype.
+ (do_setkey, _gcry_aes_ocb_crypt) [USE_PPC_CRYPTO]: Add PowerPC AES OCB
+ encryption/decryption.
+
+ rijndael-ppc: add key setup and enable single block PowerPC AES.
+ + commit 9dca65ef71b4bdbd89a087f41f4dbba71e6d2822
+ * cipher/Makefile.am: Add 'rijndael-ppc.c'.
+ * cipher/rijndael-internal.h (USE_PPC_CRYPTO): New.
+ (RIJNDAEL_context): Add 'use_ppc_crypto'.
+ * cipher/rijndael-ppc.c (backwards, swap_if_le): Remove.
+ (u128_t, ALWAYS_INLINE, NO_INLINE, NO_INSTRUMENT_FUNCTION)
+ (ASM_FUNC_ATTR, ASM_FUNC_ATTR_INLINE, ASM_FUNC_ATTR_NOINLINE)
+ (ALIGNED_LOAD, ALIGNED_STORE, VEC_LOAD_BE, VEC_STORE_BE)
+ (vec_bswap32_const, vec_aligned_ld, vec_load_be_const)
+ (vec_load_be, vec_aligned_st, vec_store_be, _gcry_aes_sbox4_ppc8)
+ (_gcry_aes_ppc8_setkey, _gcry_aes_ppc8_prepare_decryption)
+ (aes_ppc8_encrypt_altivec, aes_ppc8_decrypt_altivec): New.
+ (_gcry_aes_ppc8_encrypt, _gcry_aes_ppc8_decrypt): Rewrite.
+ (_gcry_aes_ppc8_ocb_crypt): Comment out.
+ * cipher/rijndael.c [USE_PPC_CRYPTO] (_gcry_aes_ppc8_setkey)
+ (_gcry_aes_ppc8_prepare_decryption, _gcry_aes_ppc8_encrypt)
+ (_gcry_aes_ppc8_decrypt): New prototypes.
+ (do_setkey) [USE_PPC_CRYPTO]: Add setup for PowerPC AES.
+ (prepare_decryption) [USE_PPC_CRYPTO]: Ditto.
+ * configure.ac: Add 'rijndael-ppc.lo'.
+ (gcry_cv_ppc_altivec, gcry_cv_cc_ppc_altivec_cflags)
+ (gcry_cv_gcc_inline_asm_ppc_altivec)
+ (gcry_cv_gcc_inline_asm_ppc_arch_3_00): New checks.
+
+2019-08-26 Shawn Landden <shawn@git.icu>
+
+ rijndael/ppc: implement single-block mode, and implement OCB block cipher
+ + commit 92f38a619b1cf759057e9cd532ae7c1d0331100f
+ * cipher/rijndael-ppc.c: New implementation of single-block mode, and
+ implementation of OCB mode.
+
+ hwf: add detection of PowerPC hardware features.
+ + commit b4a3c76fabfa07c10fd18b90230f60b806ad9620
+ * src/Makefile.am: PowerPC hardware detection.
+ * src/g10lib.h: Likewise.
+ * src/hwf-common.h: Likewise.
+ * src/hwf-ppc.c: Likewise.
+ * src/hwfeatures.c: Likewise.
+ * configure.ac: Likewise.
+
+2019-08-20 NIIBE Yutaka <gniibe@fsij.org>
+
+ pkgconfig: Fix libgcrypt.pc.
+ + commit 761d12f140b77b907087590646651d9578b68a54
+ * src/libgcrypt.pc.in (Cflags, Libs): Have flags.
+
+2019-08-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix build with !HAVE_PTHREAD.
+ + commit 900647d96cb7806cd9b2de343e4a4bd66c073fba
+ * tests/t-lock.c [!HAVE_PTHREAD]: Buildable now.
+
+ ecdsa: Fix unblinding too early.
+ + commit cdaeb86f067b94d9dff4235ade20dde6479d9bb8
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Keep the blinding until
+ the last step.
+
+2019-08-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix testapi.c to be buildable.
+ + commit 376124f86097414cf1f9cbbc17af935d30064c82
+ * tests/testapi.c: Fix for xgcry_control.
+
+2019-08-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ dsa,ecdsa: Fix use of nonce, use larger one.
+ + commit 7c2943309d14407b51c8166c4dcecb56a3628567
+ * cipher/dsa-common.c (_gcry_dsa_modify_k): New.
+ * cipher/pubkey-internal.h (_gcry_dsa_modify_k): New.
+ * cipher/dsa.c (sign): Use _gcry_dsa_modify_k.
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Likewise.
+ * cipher/ecc-gost.c (_gcry_ecc_gost_sign): Likewise.
+
+2019-08-07 NIIBE Yutaka <gniibe@fsij.org>
+ Ján Jančár <johny@neuromancer.sk>
+
+ ecc: Add mitigation against timing attack.
+ + commit b9577f7c89b4327edc09f2231bc8b31521102c79
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Add the order N to K.
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Compute with NBITS of P or larger.
+
+2019-08-07 NIIBE Yutaka <gniibe@fsij.org>
+
+ dsa,ecdsa: Allocate secure memory for RFC6979 generation.
+ + commit 75c2fbc43d2f2cf5f4c60cb28001fda7324185c2
+ * cipher/dsa-common.c (_gcry_dsa_gen_rfc6979_k): Use secure memory
+ just like _gcry_dsa_gen_k does.
+
+2019-07-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix previous commit.
+ + commit 6126fc2f180a9b61064cea5c838d2ff7e0b7774a
+
+
+ build: Use {CFLAGS,CPPFLAGS,LDFLAGS}_FOR_BUILD for helper programs.
+ + commit 6d80f3f12dc2ff04b0eaa3ba29ee8725b6fb4f69
+ * configure.ac (CC_FOR_BUILD): Use AX_CC_FOR_BUILD.
+ * cipher/Makefile.am (gost-s-box): Add
+ {CFLAGS,CPPFLAGS,LDFLAGS}_FOR_BUILD.
+ * doc/Makefile.am (yat2m): Likewise.
+ * m4/ax_cc_for_build.m4: New.
+
+2019-07-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix use of AVX instruction in SHA1/SSSE3 assembly.
+ + commit 320ed47963032aab7aadd8aefa054b9a7725c9f7
+ * cipher/sha1-ssse3-amd64.S: Replace 'vmovdqa' with 'movdqa'
+ instruction.
+
+2019-07-15 Werner Koch <wk@gnupg.org>
+
+ sexp: Improve argument checking of sexp parser.
+ + commit 1c2cecbb35e1a0760121d76c327651fe7b2b791a
+ * src/sexp.c (do_vsexp_sscan): Check for bad length in '%b'.
+
+2019-07-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: t-mpi-point: Remove implementation dependent checks.
+ + commit 8a0bde8c211c70756a2d8aa46e1bcf1f6f89e55d
+ * tests/t-mpi-point.c (basic_ec_math): Remove comparing X and Y,
+ only comparison of Z is relevant, mathematically.
+ Remove useless check, where different values in equivalence class
+ exist.
+ (basic_ec_math_simplified): Likewise.
+
+2019-06-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ sexp: Support reading base64.
+ + commit ab57613f10ad57d2fec648017c18d7abb189863b
+ * configure.ac (NEED_GPG_ERROR_VERSION): Require libgpg-error >= 1.27.
+ * src/sexp.c (do_vsexp_sscan): Support data in base64 format.
+ * tests/t-sexp.c (check_extract_param): Add a test case.
+
+2019-06-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Correctly return an error.
+ + commit b4a1114dc77617f0e772ddc4faf8820399b4354a
+ * cipher/ecc-ecdh.c (_gcry_ecc_get_algo_keylen): Return 0 for
+ unknow algorithm.
+ (_gcry_ecc_mul_point): Return GPG_ERR_UNSUPPORTED_ALGORITHM for
+ GCRY_ECC_CURVE448 for now.
+ Return GPG_ERR_UNKNOWN_ALGORITHM, otherwise.
+
+2019-06-21 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Fix the Curve25519 test.
+ + commit 6934711d572e13e9e78fb2c53bb119034b088c5a
+ * tests/t-cv25519.c (test_cv_x25519): Initialize SCALAR.
+
+ ecc: Improve new ECDH API.
+ + commit a658c9ccc2c741f40b0b5cdbcd184cfb9a841d17
+ * cipher/ecc-ecdh.c (_gcry_ecc_get_algo_keylen): New.
+ (_gcry_ecc_mul_point): Fill into the RESULT buffer, instead of
+ allocating new buffer.
+ * src/gcrypt-int.h: Change the API.
+ * src/gcrypt.h.in: Likewise.
+ * src/libgcrypt.def (gcry_ecc_get_algo_keylen): New.
+ * src/libgcrypt.vers (gcry_ecc_get_algo_keylen): New.
+ * src/visibility.c (gcry_ecc_get_algo_keylen): New.
+ * src/visibility.h (gcry_ecc_get_algo_keylen): New.
+ * tests/t-cv25519.c: Fix the use case.
+
+2019-06-20 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: X25519 API change to allow NULL for POINT.
+ + commit 6d77c2054ea0358fb4c6f59b4c91c673c0a83b03
+ * cipher/ecc-ecdh.c (_gcry_ecc_mul_point): Allow NULL for point,
+ meaning G.
+
+ ecc: Add an API for X25519 function as gcry_ecc_mul_point.
+ + commit ec8c2cdf977aa8d9ca5af0a9bd25aeb9190570b3
+ * configure.ac: Add ecc-ecdh.lo.
+ * cipher/Makefile.am: Add ecc-ecdh.c.
+ * cipher/ecc-common.h (reverse_buffer): Expose.
+ * cipher/ecc-eddsa.c (reverse_buffer): Expose.
+ * cipher/ecc-curves.c (domain_parms): Fix as the errata of RFC.
+ * cipher/ecc-ecdh.c: New.
+ * cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): Fix for other curves
+ than Curve25519.
+ * src/gcrypt-int.h (_gcry_ecc_mul_point): New.
+ * src/gcrypt.h.in (enum gcry_ecc_curves): New.
+ (gcry_ecc_mul_point): new.
+ * src/libgcrypt.def (gcry_ecc_mul_point): New.
+ * src/libgcrypt.vers (gcry_ecc_mul_point): New.
+ * src/visibility.h (gcry_ecc_mul_point): New.
+ * src/visibility.c (gcry_ecc_mul_point): New.
+ * tests/t-cv25519.c (test_cv_hl): Rename from test_cv.
+ (test_cv_x25519): New.
+ (test_cv): Call both of test_cv_hl and test_cv_x25519.
+
+2019-06-05 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/basic: add CTR mode carry overflow test vectors.
+ + commit 971d372f512ff6805d5b8b54e9ac1446f3f66643
+ * tests/basic.c (check_ctr_cipher): Change tv structure 'plaintext'
+ and 'out' to pointers; Add counter carry overflow test vectors; Make
+ temporary buffer large enough for new test vectors.
+
+ GCM: move look-up table to .data section and unshare between processes.
+ + commit a4c561aab1014c3630bc88faf6f5246fee16b020
+ * cipher/cipher-gcm.c (ATTR_ALIGNED_64): New.
+ (gcmR): Move to 'gcm_table' structure.
+ (gcm_table): New structure for look-up table with counters before and
+ after.
+ (gcmR): New macro.
+ (prefetch_table): Handle input with length not multiple of 256.
+ (do_prefetch_tables): Modify pre- and post-table counters to unshare
+ look-up table pages between processes.
+
+ AES: move look-up tables to .data section and unshare between processes.
+ + commit daedbbb5541cd8ecda1459d3b843ea4d92788762
+ * cipher/rijndael-internal.h (ATTR_ALIGNED_64): New.
+ * cipher/rijndael-tables.h (encT): Move to 'enc_tables' structure.
+ (enc_tables): New structure for encryption table with counters before
+ and after.
+ (encT): New macro.
+ (dec_tables): Add counters before and after encryption table; Move
+ from .rodata to .data section.
+ (do_encrypt): Change 'encT' to 'enc_tables.T'.
+ (do_decrypt): Change '&dec_tables' to 'dec_tables.T'.
+ * cipher/cipher-gcm.c (prefetch_table): Make inline; Handle input
+ with length not multiple of 256.
+ (prefetch_enc, prefetch_dec): Modify pre- and post-table counters
+ to unshare look-up table pages between processes.
+
+2019-05-19 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cipher/Makefile.am: add '-fcoverage-*' to instrumentation munging.
+ + commit c6ffa216976d80a13486b13f64d6776cdb8b6ccf
+ * cipher/Makefile.am: Remove '-fcoverage-*' flag for mixed asm/C
+ i386+amd64 implementations.
+
+2019-05-15 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ md: fix UBSAN warning.
+ + commit dad94696d9c48c18b59576776c7caa95123dfa1b
+ * cipher/md.c (gcry_md_list): Define 'context' as array of
+ PROPERLY_ALIGNED_TYPE.
+ (md_enable, _gcry_md_reset, _gcry_md_close, md_final, md_set_key)
+ (prepare_macpads, md_read, md_extract): Access md context through
+ 'gcry_md_list->context' pointer instead of 'gcry_md_list->context.c'.
+
+ Disable instrumentation on mixed Intel SSE C/assembly implementations.
+ + commit d24dae4538dbbda9e6c72a34fae69682cfb2fef0
+ * cipher/Makefile.am: Make 'tiger.o' and 'tiger.lo' depend on Makefile;
+ Add instrumentation option munging.
+ * cipher/cipher-gcm-intel-pcmul.c (ALWAYS_INLINE)
+ (NO_INSTRUMENT_FUNCTION, ASM_FUNC_ATTR, ASM_FUNC_ATTR_INLINE): New.
+ (reduction, gfmul_pclmul, gfmul_pclmul_aggr4, gfmul_pclmul_aggr8)
+ (gcm_lsh): Define with 'ASM_FUNC_ATTR_INLINE' instead of 'inline'.
+ (_gcry_ghash_setup_intel_pclmul, _gcry_ghash_intel_pclmul): Define with
+ 'ASM_FUNC_ATTR'.
+ * cipher/crc-intel-pcmul.c (ALWAYS_INLINE, NO_INSTRUMENT_FUNCTION)
+ (ASM_FUNC_ATTR, ASM_FUNC_ATTR_INLINE): New.
+ (crc32_reflected_bulk, crc32_reflected_less_than_16, crc32_bulk)
+ (crc32_less_than_16): Define with 'ASM_FUNC_ATTR_INLINE' instead of
+ 'inline'.
+ (_gcry_crc32_intel_pclmul, _gcry_crc24rfc2440_intel_pclmul): Define
+ with 'ASM_FUNC_ATTR'.
+ * cipher/rijndael-aesni.c (NO_INSTRUMENT_FUNCTION, ASM_FUNC_ATTR)
+ (ASM_FUNC_ATTR_INLINE, ASM_FUNC_ATTR_NOINLINE): New.
+ (aes_ocb_get_l, do_aesni_prepare_decryption, do_aesni_enc)
+ (do_aesni_dec, do_aesni_enc_vec4, do_aesni_dec_vec4, do_aesni_enc_vec8)
+ (do_aesni_dec_vec8, aesni_ocb_checksum): Define with
+ 'ASM_FUNC_ATTR_INLINE' instead of 'inline'.
+ (do_aesni_ctr, do_aesni_ctr_4, do_aesni_ctr_8): Define wtih
+ 'ASM_FUNC_ATTR_INLINE'.
+ (aesni_ocb_enc, aesni_ocb_dec): Define with 'ASM_FUNC_ATTR_NOINLINE'
+ instead of 'NO_INLINE'.
+ (_gcry_aes_aesni_do_setkey, _gcry_aes_aesni_prepare_decryption)
+ (_gcry_aes_aesni_encrypt, _gcry_aes_aesni_cfg_enc)
+ (_gcry_aes_aesni_cbc_enc, _gcry_aes_aesni_ctr_enc)
+ (_gcry_aes_aesni_decrypt, _gcry_aes_aesni_cfb_dec)
+ (_gcry_aes_aesni_cbc_dec, _gcry_aes_aesni_ocb_crypt)
+ (_gcry_aes_aesni_ocb_auth, _gcry_aes_aesni_xts_enc)
+ (_gcry_aes_aesni_xts_dec, _gcry_aes_aesni_xts_crypt): Define with
+ 'ASM_FUNC_ATTR'.
+ * cipher/rijndael-ssse3-amd64.c (ALWAYS_INLINE, NO_INSTRUMENT_FUNCTION)
+ (ASM_FUNC_ATTR, ASM_FUNC_ATTR_INLINE): New.
+ (aes_ocb_get_l, do_ssse3_prepare_decryption, do_vpaes_ssse3_enc)
+ (do_vpaes_ssse3_dec): Define with 'ASM_FUNC_ATTR_INLINE' instead of
+ 'inline'.
+ (_gcry_aes_ssse3_do_setkey, _gcry_aes_ssse3_prepare_decryption)
+ (_gcry_aes_ssse3_encrypt, _gcry_aes_ssse3_cfb_enc)
+ (_gcry_aes_ssse3_cbc_enc, _gcry_aes_ssse3_ctr_enc)
+ (_gcry_aes_ssse3_decrypt, _gcry_aes_ssse3_cfb_dec)
+ (_gcry_aes_ssse3_cbc_dec, ssse3_ocb_enc, ssse3_ocb_dec)
+ (_gcry_aes_ssse3_ocb_crypt, _gcry_aes_ssse3_ocb_auth): Define with
+ 'ASM_FUNC_ATTR'.
+ * cipher/sha1-intel-shaext.c (NO_INSTRUMENT_FUNCTION)
+ (ASM_FUNC_ATTR): New.
+ (_gcry_sha1_transform_intel_shaext): Define with 'ASM_FUNC_ATTR'.
+ * cipher/sha256-intel-shaext.c (NO_INSTRUMENT_FUNCTION)
+ (ASM_FUNC_ATTR): New.
+ (_gcry_sha256_transform_intel_shaext): Define with 'ASM_FUNC_ATTR'.
+ * configure.ac (ENABLE_INSTRUMENTATION_MUNGING): New.
+
+ tests/basic: fix signed interger overflow.
+ + commit 3c7ff6bd1c40d5216d6c12b6b28f77fd1a57baa7
+ * tests/basic.c (check_ocb_cipher_largebuf_split): Cast to unsigned
+ when generating buffer values.
+
+2019-05-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests: do not use GCC variadic macro extension for xgcry_control.
+ + commit be567cb5dd629e9aa22d81b29d4326e5aa97efa7
+ * tests/t-common.h (xgcry_control): Use doubly nested parenthesis for
+ passing arguments for gcry_control instead of GCC specific variadic
+ macro extension.
+ * tests/aeswrap.c: Change xgcry_control to use doubly nested
+ parenthesis.
+ * tests/basic.c: Ditto.
+ * tests/bench-slope.c: Ditto.
+ * tests/benchmark.c: Ditto.
+ * tests/curves.c: Ditto.
+ * tests/dsa-rfc6979.c: Ditto.
+ * tests/fips186-dsa: Ditto.
+ * tests/fipsdrv.c: Ditto.
+ * tests/fipsrngdrv.c: Ditto.
+ * tests/gchash.c: Ditto.
+ * tests/hashtest.c: Ditto.
+ * tests/hmac.c: Ditto.
+ * tests/keygen.c: Ditto.
+ * tests/keygrip.c: Ditto.
+ * tests/mpitests.c: Ditto.
+ * tests/pkbench.c: Ditto.
+ * tests/pkcs1v2.c: Ditto.
+ * tests/prime.c: Ditto.
+ * tests/pubkey.c: Ditto.
+ * tests/random.c: Ditto.
+ * tests/rsacvt.c: Ditto.
+ * tests/t-convert.c: Ditto.
+ * tests/t-cv25519.c: Ditto.
+ * tests/t-ed25519.c: Ditto.
+ * tests/t-kdf.c: Ditto.
+ * tests/t-lock.c: Ditto.
+ * tests/t-mpi-bit.c: Ditto.
+ * tests/t-mpi-point.c: Ditto.
+ * tests/t-secmem.c: Ditto.
+ * tests/t-sexp.c: Ditto.
+ * tests/version.c: Ditto.
+
+2019-05-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/basic: mark CFB and CFB8 as stream block cipher modes.
+ + commit 34e9306a66b47785ddbab6594ae4c23581d35b5a
+ * tests/basic.c (get_algo_mode_blklen): Return '1' for CFB and CFB8.
+
+2019-05-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix message digest final function for MD4, MD5 and RMD160.
+ + commit 15592cd52f543aadb2fab8f6c112c68075309ad6
+ * cipher/md4.c (md4_final): Use buffer offset '64 + 56' for bit count
+ on 'need one extra block' path.
+ * cipher/md5.c (md5_final): Ditto.
+ * cipher/rmd160.c (rmd160_final): Ditto.
+ * tests/basic.c (check_one_md_final): New.
+ (check_digest): Add new '*' test vectors and handle them with
+ check_one_md_final.
+
+2019-05-06 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Fix carry overflow in Stribog in 512-bit addition.
+ + commit da6cd4fea30f79cf9d8f9b2f1c6daf3aea39fa9c
+ * cipher/stribog.c (transform_bits): properly calculate carry flag
+ * tests/basic.c (check_digests): add two more test cases
+
+2019-04-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add support for explicit_memset.
+ + commit 71b0eb3fb75d2e6bbd86df055dc667b2debab0c1
+ * configure.ac: Add function check for 'explicit_memset'.
+ * src/misc.c (_gcry_fast_wipememory, _gcry_fast_wipememory2): Use
+ explicit_memset if available.
+
+ Fix CFI_PUSH/CFI_POP redefine build warning with AMD64 MPI.
+ + commit 78b1047eded8d5f8a13162d13160fce1809f6ee4
+ * mpi/amd64/func_abi.h: Move CFI macros into [__x86_64__] block.
+ * mpi/i386/syntax.h: Move CFI macros into [__i386__] block.
+
+ Enable four block aggregated GCM Intel PCLMUL implementation on i386.
+ + commit a6e7c411e5f67a9473675ca8d49017a4d13a8d3e
+ * cipher/cipher-gcm-intel-pclmul.c (reduction): Change "%%xmm7" to
+ "%%xmm5".
+ (gfmul_pclmul_aggr4): Move outside [__x86_64__] block; Remove usage of
+ XMM8-XMM15 registers; Do not preload H-values and be_mask to reduce
+ register usage for i386.
+ (_gcry_ghash_setup_intel_pclmul): Enable calculation of H2, H3 and H4
+ on i386.
+ (_gcry_ghash_intel_pclmul): Adjust to above gfmul_pclmul_aggr4
+ changes; Move 'aggr4' code path outside [__x86_64__] block.
+
+ Prefetch GCM look-up tables.
+ + commit 1374254c2904ab5b18ba4a890856824a102d4705
+ * cipher/cipher-gcm.c (prefetch_table, do_prefetch_tables)
+ (prefetch_tables): New.
+ (ghash_internal): Call prefetch_tables.
+
+ Optimizations for generic table-based GCM implementations.
+ + commit ecd02cdd61e8c690f48637656f0e1e08b750fe30
+ * cipher/cipher-gcm.c [GCM_TABLES_USE_U64] (do_fillM): Precalculate
+ M[32..63] values.
+ [GCM_TABLES_USE_U64] (do_ghash): Split processing of two 64-bit halfs
+ of the input to two separate loops; Use precalculated M[] values.
+ [GCM_USE_TABLES && !GCM_TABLES_USE_U64] (do_fillM): Precalculate
+ M[64..127] values.
+ [GCM_USE_TABLES && !GCM_TABLES_USE_U64] (do_ghash): Use precalculated
+ M[] values.
+ [GCM_USE_TABLES] (bshift): Avoid conditional execution for mask
+ calculation.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Double gcm_table size.
+
+2019-04-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Optimizations for GCM Intel/PCLMUL implementation.
+ + commit af5f3fb08674608acf6617ea622ed0b9a2ee77a5
+ * cipher/cipher-gcm-intel-pclmul.c (reduction): New.
+ (glmul_pclmul): Include shifting to left into pclmul operations; Use
+ 'reduction' helper function.
+ [__x86_64__] (gfmul_pclmul_aggr4): Reorder instructions and adjust
+ register usage to free up registers; Use 'reduction' helper function;
+ Include shifting to left into pclmul operations; Moving load H values
+ and input from caller into this function.
+ [__x86_64__] (gfmul_pclmul_aggr8): New.
+ (gcm_lsh): New.
+ (_gcry_ghash_setup_intel_pclmul): Left shift H values to left by
+ one; Preserve XMM6-XMM15 registers on WIN64.
+ (_gcry_ghash_intel_pclmul) [__x86_64__]: Use 8 block aggregated
+ reduction function.
+
+ Move data pointer macro for 64-bit ARM assembly to common header.
+ + commit b9be297bb8eba7a09fa8413261de1587adcfd381
+ * cipher/asm-common-aarch64.h (GET_DATA_POINTER): New.
+ * cipher/chacha20-aarch64.S (GET_DATA_POINTER): Remove.
+ * cipher/cipher-gcm-armv8-aarch64-ce.S (GET_DATA_POINTER): Remove.
+ * cipher/crc-armv8-aarch64-ce.S (GET_DATA_POINTER): Remove.
+ * cipher/rijndael-armv8-aarch64-ce.S (GET_DATA_POINTER): Remove.
+ * cipher/sha1-armv8-aarch64-ce.S (GET_DATA_POINTER): Remove.
+ * cipher/sha256-armv8-aarch64-ce.S (GET_DATA_POINTER): Remove.
+
+ Add CFI unwind assembly directives for 64-bit ARM assembly.
+ + commit 5a2a96a63517838e04f9fc0fb2d932fac5124b8a
+ * cipher/asm-common-aarch64.h (CFI_STARTPROC, CFI_ENDPROC)
+ (CFI_REMEMBER_STATE, CFI_RESTORE_STATE, CFI_ADJUST_CFA_OFFSET)
+ (CFI_REL_OFFSET, CFI_DEF_CFA_REGISTER, CFI_REGISTER, CFI_RESTORE)
+ (DW_REGNO_SP, DW_SLEB128_7BIT, DW_SLEB128_28BIT, CFI_CFA_ON_STACK)
+ (CFI_REG_ON_STACK): New.
+ * cipher/camellia-aarch64.S: Add CFI directives.
+ * cipher/chacha20-aarch64.S: Add CFI directives.
+ * cipher/cipher-gcm-armv8-aarch64-ce.S: Add CFI directives.
+ * cipher/crc-armv8-aarch64-ce.S: Add CFI directives.
+ * cipher/rijndael-aarch64.S: Add CFI directives.
+ * cipher/rijndael-armv8-aarch64-ce.S: Add CFI directives.
+ * cipher/sha1-armv8-aarch64-ce.S: Add CFI directives.
+ * cipher/sha256-armv8-aarch64-ce.S: Add CFI directives.
+ * cipher/twofish-aarch64.S: Add CFI directives.
+ * mpi/aarch64/mpih-add1.S: Add CFI directives.
+ * mpi/aarch64/mpih-mul1.S: Add CFI directives.
+ * mpi/aarch64/mpih-mul2.S: Add CFI directives.
+ * mpi/aarch64/mpih-mul3.S: Add CFI directives.
+ * mpi/aarch64/mpih-sub1.S: Add CFI directives.
+ * mpi/asm-common-aarch64.h: Include "../cipher/asm-common-aarch64.h".
+ (ELF): Remove.
+
+ Add 64-bit ARMv8/CE PMULL implementation of CRC.
+ + commit 14c8a593ede42f51f567ed7ba77b53124151aa38
+ * cipher/Makefile.am: Add 'crc-armv8-ce.c' and
+ 'crc-armv8-aarch64-ce.S'.
+ * cipher/asm-common-aarch64.h [HAVE_GCC_ASM_CFI_DIRECTIVES]: Add CFI
+ helper macros.
+ * cipher/crc-armv8-aarch64-ce.S: New.
+ * cipher/crc-armv8-ce.c: New.
+ * cipher/crc.c (USE_ARM_PMULL): New.
+ (CRC_CONTEXT) [USE_ARM_PMULL]: Add 'use_pmull'.
+ [USE_ARM_PMULL] (_gcry_crc32_armv8_ce_pmull)
+ (_gcry_crc24rfc2440_armv8_ce_pmull): New prototypes.
+ (crc32_init, crc32rfc1510_init, crc24rfc2440_init): Enable ARM PMULL
+ implementations if supported by HW features.
+ (crc32_write, crc24rfc2440_write) [USE_ARM_PMULL]: Use ARM PMULL
+ implementations if enabled.
+ * configure.ac: Add 'crc-armv8-ce.lo' and 'crc-armv8-aarch64-ce.lo'.
+
+2019-04-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ mpi: make stack unwinding work at i386 mpi functions.
+ + commit b878a986f3ab2c35aff89c7f66f137a91542ed5b
+ * mpi/i386/syntax.h: Include 'config.h'.
+ (CFI_STARTPROC, CFI_ENDPROC, CFI_ADJUST_CFA_OFFSET, CFI_REL_OFFSET)
+ (CFI_RESTORE, CFI_PUSH, CFI_POP): New.
+ * mpi/i386/mpih-add1.S: Add CFI directives.
+ * mpi/i386/mpih-lshift.S: Add CFI directives.
+ * mpi/i386/mpih-mul1.S: Add CFI directives.
+ * mpi/i386/mpih-mul2.S: Add CFI directives.
+ * mpi/i386/mpih-mul3.S: Add CFI directives.
+ * mpi/i386/mpih-rshift.S: Add CFI directives.
+ * mpi/i386/mpih-sub1.S: Add CFI directives.
+
+ hwf-x86: make stack unwinding work at i386 cpuid functions.
+ + commit 0bd18e8bf7d67072f8c77352140b4ed4cfde3c6c
+ * src/hwf-x86.c (FORCE_FUNC_FRAME_POINTER): New.
+ [__i386__] (is_cpuid_available): Force use of stack frame pointer as
+ inline assembly modifies stack register; Add 'memory' constraint for
+ inline assembly.
+ [__i386__] (get_cpuid): Avoid push/pop instruction when preserving
+ %ebx register over cpuid.
+
+ Limit and document Blowfish key lengths to 8-576 bits.
+ + commit 3546599e5578f89f9e77b08bf599f9c44b23da5f
+ * cipher/blowfish.c (BLOWFISH_KEY_MIN_BITS)
+ (BLOWFISH_KEY_MAX_BITS): New.
+ (do_bf_setkey): Check input key length to MIN_BITS and MAX_BITS.
+ * doc/gcrypt.texi: Update supported Blowfish key lengths.
+ * tests/basic.c (check_ecb_cipher): New, with Blowfish test vectors
+ for different key lengths.
+ (check_cipher_modes): Call 'check_ecb_cipher'.
+
+2019-04-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add CFI unwind assembly directives for AMD64 assembly.
+ + commit d11ae95d05dc39ec6b825d1109afadd964589880
+ * configure.ac (gcry_cv_gcc_asm_cfi_directives): New.
+ * cipher/asm-common-amd64.h (ADD_RIP, CFI_STARTPROC, CFI_ENDPROC)
+ (CFI_REMEMBER_STATE, CFI_RESTORE_STATE, CFI_ADJUST_CFA_OFFSET)
+ (CFI_REL_OFFSET, CFI_DEF_CFA_REGISTER, CFI_REGISTER, CFI_RESTORE)
+ (CFI_PUSH, CFI_POP, CFI_POP_TMP_REG, CFI_LEAVE, DW_REGNO)
+ (DW_SLEB128_7BIT, DW_SLEB128_28BIT, CFI_CFA_ON_STACK)
+ (CFI_REG_ON_STACK): New.
+ (ENTER_SYSV_FUNCPARAMS_0_4, EXIT_SYSV_FUNC): Add CFI directives.
+ * cipher/arcfour-amd64.S: Add CFI directives.
+ * cipher/blake2b-amd64-avx2.S: Add CFI directives.
+ * cipher/blake2s-amd64-avx.S: Add CFI directives.
+ * cipher/blowfish-amd64.S: Add CFI directives.
+ * cipher/camellia-aesni-avx-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/camellia-aesni-avx2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/cast5-amd64.S: Add CFI directives.
+ * cipher/chacha20-amd64-avx2.S: Add CFI directives.
+ * cipher/chacha20-amd64-ssse3.S: Add CFI directives.
+ * cipher/des-amd64.S: Add CFI directives.
+ * cipher/rijndael-amd64.S: Add CFI directives.
+ * cipher/rijndael-ssse3-amd64-asm.S: Add CFI directives.
+ * cipher/salsa20-amd64.S: Add CFI directives; Use 'asm-common-amd64.h'.
+ * cipher/serpent-avx2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/serpent-sse2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha1-avx-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha1-avx-bmi2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha1-avx2-bmi2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha1-ssse3-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha256-avx-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha256-avx2-bmi2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha256-ssse3-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha512-avx-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha512-avx2-bmi2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/sha512-ssse3-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/twofish-amd64.S: Add CFI directives.
+ * cipher/twofish-avx2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * cipher/whirlpool-sse2-amd64.S: Add CFI directives; Use
+ 'asm-common-amd64.h'.
+ * mpi/amd64/func_abi.h: Include 'config.h'.
+ (CFI_STARTPROC, CFI_ENDPROC, CFI_ADJUST_CFA_OFFSET, CFI_REL_OFFSET)
+ (CFI_RESTORE, CFI_PUSH, CFI_POP): New.
+ (FUNC_ENTRY, FUNC_EXIT): Add CFI directives.
+
+2019-04-15 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ twofish-amd64: do not use xchg instruction.
+ + commit 0903b215ef5a18332b740a24e6e2bfbed9e1d97b
+ * cipher/twofish-amd64.S (g1g2_3): Swap ab and cd registers using
+ 'movq' instructions instead of 'xchgq'.
+
+2019-04-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Use FreeBSD's elf_aux_info for detecting ARM HW features.
+ + commit 2ffc689d4757f31f1e2c4961b94b0b0c8dc302b7
+ * configure.ac: Add function check for 'elf_aux_info'.
+ * src/hwf-arm.c [HAVE_ELF_AUX_INFO]: Include 'sys/auxv.h'.
+ [HAVE_ELF_AUX_INFO && !HAVE_GETAUXVAL] (HAVE_GETAUXVAL)
+ (getauxval): New.
+
+2019-04-08 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Use getauxval system function for detecting ARM HW features.
+ + commit 6812a2c5bd2d9129bfdf34f3daf89cd8543ed8e5
+ * configure.ac: Add header check for 'sys/auxv.h'; Add function check
+ for 'getauxval'.
+ * src/hwf-arm.c [HAVE_SYS_AUXV_H && HAVE_GETAUXVAL]: Include
+ 'sys/auxv.h'.
+ (HAS_SYS_AT_HWCAP): Enable AT_HWCAP if have 'getauxval' in addition of
+ __linux__.
+ (AT_HWCAP, AT_HWCAP2, HWCAP_NEON, HWCAP2_AES, HWCAP2_PMULL)
+ (HWCAP2_SHA1, HWCAP2_SHA2, HWCAP_ASIMD, HWCAP_AES)
+ (HWCAP_PMULL, HWCAP_SHA1, HWCAP_SHA2): Define these macros only if not
+ already defined.
+ (get_hwcap) [HAVE_SYS_AUXV_H && HAVE_GETAUXVAL]: Use 'getauxval' to
+ fetch HW capability flags.
+
+ Disable SM3 in FIPS mode.
+ + commit 04a6c3c7482dd1ecb5113a049b1765b0d5f212fb
+ * cipher/sm3.h (_gcry_digest_spec_sm3): Set flags.fips to zero.
+
+2019-04-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Tune SHA-512/AVX2 and SHA-256/AVX2 implementations.
+ + commit 478581c5107ae75281c54e56cdcef5165f3155ca
+ * cipher/sha256-avx2-bmi2-amd64.S (ONE_ROUND_PART1, ONE_ROUND_PART2)
+ (ONE_ROUND): New round function.
+ (FOUR_ROUNDS_AND_SCHED, FOUR_ROUNDS): Use new round function.
+ (_gcry_sha256_transform_amd64_avx2): Exit early if number of blocks is
+ zero; Writing XFER to stack earlier and handle XREF writing in
+ FOUR_ROUNDS_AND_SCHED.
+ * cipher/sha512-avx2-bmi2-amd64.S (MASK_YMM_LO, MASK_YMM_LOx): New.
+ (ONE_ROUND_PART1, ONE_ROUND_PART2, ONE_ROUND): New round function.
+ (FOUR_ROUNDS_AND_SCHED, FOUR_ROUNDS): Use new round function.
+ (_gcry_sha512_transform_amd64_avx2): Writing XFER to stack earlier and
+ handle XREF writing in FOUR_ROUNDS_AND_SCHED.
+
+2019-04-05 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add SHA512/224 and SHA512/256 algorithms.
+ + commit a3683b6f623189a4b65bb584bb9e65e3ad7b3139
+ * cipher/mac-hmac.c (map_mac_algo_to_md): Add mapping for SHA512/224
+ and SHA512/256.
+ (_gcry_mac_type_spec_hmac_sha512_256)
+ (_gcry_mac_type_spec_hmac_sha512_224): New.
+ * cipher/mac-internal.h (_gcry_mac_type_spec_hmac_sha512_256)
+ (_gcry_mac_type_spec_hmac_sha512_224): New.
+ * cipher/mac.c (mac_list, mac_list_algo101): Add SHA512/224 and
+ SHA512/256.
+ * cipher/md.c (digest_list, digest_list_algo301)
+ (prepare_macpads): Ditto.
+ * cipher/sha512.c (run_selftests): Ditto.
+ (sha512_init_common): Move common initialization here.
+ (sha512_init, sha384_init): Use common initialization function.
+ (sha512_224_init, sha512_256_init, _gcry_sha512_224_hash_buffer)
+ (_gcry_sha512_224_hash_buffers, _gcry_sha512_256_hash_buffer)
+ (_gcry_sha512_256_hash_buffers, selftests_sha512_224)
+ (selftests_sha512_256, sha512_224_asn, oid_spec_sha512_224)
+ (_gcry_digest_spec_sha512_224, sha512_256_asn, oid_spec_sha512_256)
+ (_gcry_digest_spec_sha512_256): New.
+ * doc/gcrypt.texi: Add SHA512/224 and SHA512/256; Add missing
+ HMAC-BLAKE2s and HMAC-BLAKE2b.
+ * src/cipher.h (_gcry_digest_spec_sha512_224)
+ (_gcry_digest_spec_sha512_256): New.
+ * src/gcrypt.h.in (GCRY_MD_SHA512_256, GCRY_MD_SHA512_224): New.
+ (GCRY_MAC_HMAC_SHA512_256, GCRY_MAC_HMAC_SHA512_224): New.
+ * tests/basic.c (check_digests): Add SHA512/224 and SHA512/256
+ test vectors.
+
+ Remove extra buffer flush at begining of digest final functions.
+ + commit c6055aaccac86e1ca8a9d35c980d7abbacf2a9ff
+ * cipher/md2.c (md2_final): Remove _gcry_md_block_write flush call
+ from entry.
+ * cipher/md4.c (md4_final): Ditto.
+ * cipher/md5.c (md5_final): Ditto.
+ * cipher/rmd160.c (rmd160_final): Ditto.
+ * cipher/sha1.c (sha1_final): Ditto.
+ * cipher/sha256.c (sha256_final): Ditto.
+ * cipher/sha512.c (sha512_final): Ditto.
+ * cipher/sm3.c (sm3_final): Ditto.
+ * cipher/stribog.c (stribog_final): Ditto.
+ * cipher/tiger.c (tiger_final): Ditto.
+
+ Optimizations for digest final functions.
+ + commit e76cd0e2b1f6025c1319576a5848815d1d231aeb
+ * cipher/md4.c (md4_final): Avoid byte-by-byte buffer setting when
+ padding; Merge extra and last block processing.
+ * cipher/md5.c (md5_final): Ditto.
+ * cipher/rmd160.c (rmd160_final): Ditto.
+ * cipher/sha1.c (sha1_final): Ditto.
+ * cipher/sha256.c (sha256_final): Ditto.
+ * cipher/sm3.c (sm3_final): Ditto.
+ * cipher/tiger.c (tiger_final): Ditto.
+ * cipher/sha512.c (sha512_final): Avoid byte-by-byte buffer setting
+ when padding.
+ * cipher/stribog.c (stribog_final): Ditto.
+ * cipher/whirlpool.c (whirlpool_final): Ditto.
+
+ tests/basic: add hash test for small block sizes.
+ + commit c54b1c96c644c941f3eb3d2a09432b82f25b6ff1
+ * tests/basic.c (check_one_md): Compare hashing buffers sizes from 1 to
+ 129 as full buffer input and byte-by-byte input.
+
+ Burn stack in transform functions for SHA2 AMD64 implementations.
+ + commit 74ef3ecbf94e704975e238a99c0e0480cebf46ac
+ * cipher/sha256-avx-amd64.S: Burn stack inside transform functions.
+ * cipher/sha256-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha256-ssse3-amd64.S: Ditto.
+ * cipher/sha512-avx-amd64.S: Ditto.
+ * cipher/sha512-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha512-ssse3-amd64.S: Ditto.
+
+ Burn stack in transform functions for SHA1 AMD64 implementations.
+ + commit f3d4bd90662faaedd37ce0dae1f9e7f91748e91e
+ * cipher/sha1-avx-amd64.S: Burn stack inside transform functions.
+ * cipher/sha1-avx-bmi2-amd64.S: Ditto.
+ * cipher/sha1-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha1-ssse3-amd64.S: Ditto.
+
+ Add AVX2/BMI2 implementation of SHA1.
+ + commit b982900bfe6403e95a157271d8d811c9c573af9e
+ * cipher/Makefile.am: Add 'sha1-avx2-bmi2-amd64.S'.
+ * cipher/hash-common.h (MD_BLOCK_CTX_BUFFER_SIZE): New.
+ (gcry_md_block_ctx): Change buffer length to MD_BLOCK_CTX_BUFFER_SIZE.
+ * cipher/sha1-avx-amd64.S: Add missing .size for transform function.
+ * cipher/sha1-ssse3-amd64.S: Add missing .size for transform function.
+ * cipher/sha1-avx-bmi2-amd64.S: Add missing .size for transform
+ function; Tweak implementation for small ~1% speed increase.
+ * cipher/sha1-avx2-bmi2-amd64.S: New.
+ * cipher/sha1.c (USE_AVX2, _gcry_sha1_transform_amd64_avx2_bmi2)
+ (do_sha1_transform_amd64_avx2_bmi2): New.
+ (sha1_init) [USE_AVX2]: Enable AVX2 implementation if supported by
+ HW features.
+ (sha1_final): Merge processing of two last blocks when extra block is
+ needed.
+
+2019-03-31 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ blowfish: add three rounds parallel handling to generic C implementation
+ + commit ced7508c857c0cc37da2299a393e5b167dd28e54
+ * cipher/blowfish.c (BLOWFISH_ROUNDS): Remove.
+ [BLOWFISH_ROUNDS != 16] (function_F): Remove.
+ (F): Replace big-endian and little-endian version with single
+ endian-neutral version.
+ (R3, do_encrypt_3, do_decrypt_3): New.
+ (_gcry_blowfish_ctr_enc, _gcry_blowfish_cbc_dec)
+ (_gcry_blowfish_cfb_dec): Use new three block functions.
+
+ cast5: add three rounds parallel handling to generic C implementation.
+ + commit 4ec566b3689eff4a712eacfcbb4161eb243bb1df
+ * cipher/cast5.c (do_encrypt_block_3, do_decrypt_block_3): New.
+ (_gcry_cast5_ctr_enc, _gcry_cast5_cbc_dec, _gcry_cast5_cfb_dec): Use
+ new three block functions.
+
+ cast5: read Kr four blocks at time and shift for current round.
+ + commit 8a0e68be1020d0c359bf8191159ac1ebe32a5aa0
+ * cipher/cast5.c (do_encrypt_block, do_decrypt_block): Read Kr as
+ 32-bit words instead of bytes and shift value for each round.
+
+ Add helper function for adding value to cipher block.
+ + commit 0fe918fa897cca9e01cbdb80d14106cfe5af680e
+ * cipher/cipher-internal.h (cipher_block_add): New.
+ * cipher/blowfish.c (_gcry_blowfish_ctr_enc): Use new helper function
+ for CTR block increment.
+ * cipher/camellia-glue.c (_gcry_camellia_ctr_enc): Ditto.
+ * cipher/cast5.c (_gcry_cast5_ctr_enc): Ditto.
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Ditto.
+ * cipher/des.c (_gcry_3des_ctr_enc): Ditto.
+ * cipher/rijndael.c (_gcry_aes_ctr_enc): Ditto.
+ * cipher/serpent.c (_gcry_serpent_ctr_enc): Ditto.
+ * cipher/twofish.c (_gcry_twofish_ctr_enc): Ditto.
+
+2019-03-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Optimize OCB set_key and set_nonce.
+ + commit efd700e31dc8e1e386d367d1b682000977e0c810
+ * cipher/cipher-ocb.c (double_block): Change to input/output
+ host-endian block instead of big-endian buffer.
+ (double_block_cpy): Remove.
+ (bit_copy): Use fixed length copy and 'u64' for calculations.
+ (ocb_get_L_big): Handle block endian conversions for double_block.
+ (_gcry_cipher_ocb_setkey): Handle block endian conversions for
+ double_block.
+ (_gcry_cipher_ocb_set_nonce): Set full length of 'ktop' to zero; Drop
+ length parameter for bit_copy.
+
+ AES-NI/OCB: Optimize last and first key XORing.
+ + commit eacbd59b1333b95858886999c8049e04bf72ad74
+ * cipher/rijndael-aesni.c (aesni_ocb_enc, aesni_ocb_dec)
+ [__x86_64__]: Reorder and mix first and last key XORing with OCB offset
+ XOR operations.
+
+ AES-NI/OCB: Perform checksumming inline with encryption.
+ + commit e924ce456d5728a81c148de4a6eb23373cb70ca0
+ * cipher/rijndael-aesni.c (aesni_ocb_enc): Remove call to
+ 'aesni_ocb_checksum', instead perform checksumming inline with offset
+ calculations.
+
+2019-03-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ AES-NI/OCB: Use stack for temporary storage.
+ + commit b82dbbedf027327e0b4444a01edb045f51c4152b
+ * cipher/rijndael-aesni.c (aesni_ocb_enc, aesni_ocb_dec): Use stack
+ allocated 'tmpbuf' instead of output buffer as temporary storage.
+
+2019-03-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/basic: add large buffer testing for ciphers.
+ + commit cabeebfc1179c8f5982834a8cbce02c55b3468e2
+ * tests/basic.c (check_one_cipher_core): Allocate buffers from heap.
+ (check_one_cipher): Add testing with large buffer (~65 KiB) in addition
+ to medium size buffer (~2 KiB).
+
+ chacha20-poly1305: fix wrong en/decryption on large input buffers.
+ + commit 049376470b31832d3331fc0037d273b4147e9d38
+ * cipher/chacha20.c (_gcry_chacha20_poly1305_encrypt)
+ (_gcry_chacha20_poly1305_decrypt): Correctly use 'currlen' for chacha20
+ on the non-stitched code path.
+
+2019-03-24 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ doc: add mention about aligning data to cachelines for best performance.
+ + commit bb03edcbba95e06686188957a65c1967ee07cd6a
+ * doc/gcrypt.text: Add mention about aligning data to cachelines for
+ best performance.
+
+ random-drbg: do not use calloc for zero ctr.
+ + commit 5a20151213c2e496513c541c36e4ebd086b20be9
+ * random/random-drbg.c (DRBG_CTR_NULL_LEN): Move to 'constants'
+ section.
+ (drbg_state_s): Remove 'ctr_null' member.
+ (drbg_ctr_generate): Add 'drbg_ctr_null'.
+ (drbg_sym_fini, drbg_sym_init): Remove 'drbg->ctr_null' usage.
+
+2019-03-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add ARMv7/NEON accelerated GCM implementation.
+ + commit 2445cf7431fab921f6c1870da7084ee698992064
+ * cipher/Makefile.am: Add 'cipher-gcm-armv7-neon.S'.
+ * cipher/cipher-gcm-armv7-neon.S: New.
+ * cipher/cipher-gcm.c [GCM_USE_ARM_NEON] (_gcry_ghash_setup_armv7_neon)
+ (_gcry_ghash_armv7_neon, ghash_setup_armv7_neon)
+ (ghash_armv7_neon): New.
+ (setupM) [GCM_USE_ARM_NEON]: Use armv7/neon implementation if have
+ HWF_ARM_NEON.
+ * cipher/cipher-internal.h (GCM_USE_ARM_NEON): New.
+
+ Use memset instead of setting buffers byte by byte.
+ + commit 6f2391d2df029b0e1a4e5dde17c3d97cc594a1c7
+ * cipher/cipher-ccm.c (do_cbc_mac): Replace buffer setting loop with memset call.
+ * cipher/cipher-gcm.c (do_ghash_buf): Ditto.
+ * cipher/poly1305.c (poly1305_final): Ditto.
+
+ Use buf_cpy instead of copying buffers byte by byte.
+ + commit 4db6d8796c0d95ab89e9ad69336509b604b957cd
+ * cipher/bufhelp.h (buf_cpy): Skip memcpy if length is zero.
+ * cipher/cipher-ccm.c (do_cbc_mac): Replace buffer copy loops with buf_cpy call.
+ * cipher/cipher-cmac.c (_gcry_cmac_write): Ditto.
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_authenticate): Ditto.
+
+ Reduce overhead on generic hash write function.
+ + commit e76617cbab018dd8f41fd6b4ec6740b5303f7e13
+ * cipher/hash-common.c (_gcry_md_block_write): Remove recursive
+ function call; Use buf_cpy for copying buffers; Burn stack only once.
+
+ sha1-avx: use vmovdqa instead of movdqa.
+ + commit f8d14df1abd645c3279b14da43b4a7983d87f89f
+ * cipher/sha1-avx-amd64.S: Replace 'movdqa' with 'vmovdqa'.
+ * cipher/sha1-avx-bmi2-amd64.S: Replace 'movdqa' with 'vmovdqa'.
+
+ doc/gcrypt.texi: update HW feature list.
+ + commit 7abf65da84c7106250a5ed2de78b05610cf251f4
+ * doc/gcrypt.texi: Update FW feature list.
+
+2019-03-20 Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+
+ ecc: Adjust debugging output.
+ + commit 54db6a4b44124ed7e95897174f32262482b4b0cb
+ * cipher/ecc.c (ecc_check_secret_key): Adjust debugging output to use
+ full column titles.
+
+2019-02-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ fips: Only test check_binary_integrity when fips_mode is enabled.
+ + commit ad133fc79757236359252e92244fe16e9adb45a3
+ * src/fips.c (_gcry_fips_run_selftests): Check the status of fips_mode
+ before calling check_binary_integrity.
+
+2019-02-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add 2-way path for SSSE3 version of ChaCha20.
+ + commit d455068988e5779b0200c51415ddab6b51e12dc4
+ * cipher/chacha20-amd64-ssse3.S (_gcry_chacha20_amd64_ssse3_blocks1)
+ (_gcry_chacha20_poly1305_amd64_ssse3_blocks1): Add 2-way code paths.
+ * cipher/chacha20.c (_gcry_chacha20_poly1305_encrypt): Add
+ preprosessing of 2 blocks with SSSE3.
+
+2019-01-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Do not precalculate OCB offset L0+L1+L0.
+ + commit afab94d222425ecb838eb56cb0723bdaf3e5de36
+ * cipher/cipher-internal.h (gcry_cipher_handle): Remove OCB L0L1L0.
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_setkey): Ditto.
+ * cipher/rijndael-aesni.c (aesni_ocb_enc, aesni_ocb_dec)
+ (_gcry_aes_aesni_ocb_auth): Replace L0L1L0 use with L1.
+
+ Calculate OCB L-tables when setting key instead of when setting nonce.
+ + commit c15409c49993166ab1325d45360b3a8fe72a5556
+ * cipher/cipher-internal.h (gcry_cipher_handle): Mark areas of
+ u_mode.ocb that are and are not cleared by gcry_cipher_reset.
+ (_gcry_cipher_ocb_setkey): New.
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_set_nonce): Split
+ L-table generation to ...
+ (_gcry_cipher_ocb_setkey): ... this new function.
+ * cipher/cipher.c (cipher_setkey): Add handling for OCB mode.
+ (cipher_reset): Do not clear L-values for OCB mode.
+
+ chacha20-amd64-avx2: optimize output xoring.
+ + commit 08e0650c21984bb9ddf5a1dabb1cc890fabf63ab
+ * cipher/chacha20-amd64-avx2.S (STACK_TMP2): Remove.
+ (transpose_16byte_2x2, xor_src_dst): New.
+ (BUF_XOR_256_TO_128): Remove.
+ (_gcry_chaha20_amd64_avx2_blocks8)
+ (_gcry_chacha20_poly1305_amd64_avx2_blocks8): Replace
+ BUF_XOR_256_TO_128 with transpose_16byte_2x2/xor_src_dst; Reduce stack
+ usage; Better interleave chacha20 state merging and output xoring.
+
+ tests/bench-slope: prevent auto-mhz detection getting stuck.
+ + commit 28614a77a28190ab902a2b98039de2cd0635c7c7
+ * cipher/bench-slope.c (bench_ghz, bench_ghz_diff): New static
+ variables.
+ (AUTO_GHZ_TARGET_DIFF): New macro.
+ (do_slope_benchmark): Reduce target auto-mhz accuracy after
+ repeated failures.
+ (bench_print_result_csv, bench_print_result_std): Print auto-ghz
+ different if 1 Mhz or more.
+ (do_slope_benchmark, bench_print_result_csv, bench_print_result_std)
+ (bench_print_result): Remove 'bench_ghz' parameter.
+ (cipher_bench_one, hash_bench_one, mac_bench_one)
+ (kdf_bench_one): Remove 'bench_ghz' variable.
+
+ tests/bench-slope: add missing cipher context reset.
+ + commit 546f13ae08918726791600cdd0d0be56cc52c790
+ * tests/bench-slope.c (bench_encrypt_do_bench)
+ (bench_decrypt_do_bench): Add call to 'gcry_cipher_reset'.
+
+ Add stitched ChaCha20-Poly1305 SSSE3 and AVX2 implementations.
+ + commit d6330dfb4b0e9fb3f8eef65ea13146060b804a97
+ * cipher/asm-poly1305-amd64.h: New.
+ * cipher/Makefile.am: Add 'asm-poly1305-amd64.h'.
+ * cipher/chacha20-amd64-avx2.S (QUATERROUND2): Add interleave
+ operators.
+ (_gcry_chacha20_poly1305_amd64_avx2_blocks8): New.
+ * cipher/chacha20-amd64-ssse3.S (QUATERROUND2): Add interleave
+ operators.
+ (_gcry_chacha20_poly1305_amd64_ssse3_blocks4)
+ (_gcry_chacha20_poly1305_amd64_ssse3_blocks1): New.
+ * cipher/chacha20.c (_gcry_chacha20_poly1305_amd64_ssse3_blocks4)
+ (_gcry_chacha20_poly1305_amd64_ssse3_blocks1)
+ (_gcry_chacha20_poly1305_amd64_avx2_blocks8): New prototypes.
+ (chacha20_encrypt_stream): Split tail to...
+ (do_chacha20_encrypt_stream_tail): ... new function.
+ (_gcry_chacha20_poly1305_encrypt)
+ (_gcry_chacha20_poly1305_decrypt): New.
+ * cipher/cipher-internal.h (_gcry_chacha20_poly1305_encrypt)
+ (_gcry_chacha20_poly1305_decrypt): New prototypes.
+ * cipher/cipher-poly1305.c (_gcry_cipher_poly1305_encrypt): Call
+ '_gcry_chacha20_poly1305_encrypt' if cipher is ChaCha20.
+ (_gcry_cipher_poly1305_decrypt): Call
+ '_gcry_chacha20_poly1305_decrypt' if cipher is ChaCha20.
+ * cipher/poly1305-internal.h (_gcry_cipher_poly1305_update_burn): New
+ prototype.
+ * cipher/poly1305.c (poly1305_blocks): Make static.
+ (_gcry_poly1305_update): Split main function body to ...
+ (_gcry_poly1305_update_burn): ... new function.
+
+ Add SSSE3 optimized non-parallel ChaCha20 function.
+ + commit 7d9b2f114f3edf4d13640616cf34c79364234781
+ * cipher/chacha20-amd64-ssse3.S (ROTATE_SHUF, ROTATE, WORD_SHUF)
+ (QUARTERROUND4, _gcry_chacha20_amd64_ssse3_blocks1): New.
+ * cipher/chacha20.c (_gcry_chacha20_amd64_ssse3_blocks1): New
+ prototype.
+ (chacha20_blocks): Rename to ...
+ (do_chacha20_blocks): ... this.
+ (chacha20_blocks): New.
+ (chacha20_encrypt_stream): Adjust for new chacha20_blocks function.
+
+ tests/basic: increase buffer size for check_one_cipher.
+ + commit 88e482d16ee80de41b6f133e77f0d15423fcd266
+ * tests/basic.c (check_one_cipher_core)
+ (check_one_cipher): Increase buffer from 1040 to 1904 bytes.
+
+ tests/basic: check AEAD tags in check_one_cipher test.
+ + commit eee1f152a5b3040f6723d287d1b01fb939be67b7
+ * tests/basic.c (get_algo_mode_taglen): New.
+ (check_one_cipher_core_reset): Check that tags are same with
+ AEAD modes.
+
+2019-01-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: With LD_LIBRARY_PATH defined, use --disable-new-dtags.
+ + commit e5c2f8a2cd2b89d90ea30de2dedb0e92498a5f70
+ * configure.ac (LDADD_FOR_TESTS_KLUDGE): New for --disable-new-dtags.
+ * tests/Makefile.am (LDADD, t_lock_LDADD): Use LDADD_FOR_TESTS_KLUDGE.
+
+ random: Fix previous commit for getentropy function.
+ + commit 17f246c7044ab9ed236f6ec73fc126654257f0f9
+ * random/rndlinux.c [__NR_getrandom] (_gcry_rndlinux_gather_random):
+ Check return value only for use of syscall.
+
+ random: Use getentropy when available for not GNU/Linux.
+ + commit 2677d7d482bf2d078c1dce64854747c5b148924b
+ * configure.ac: Detect getentropy.
+ * random/rndlinux.c [__linux__] (getentropy): Macro defined.
+ [HAVE_GETENTROPY] (_gcry_rndlinux_gather_random): Use getentropy.
+
+2019-01-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ camellia-aarch64: do not export look-up table globally.
+ + commit 09c27280cc09798d15369b3a143036b7ab5ddd69
+ * cipher/camellia-aarch64.S (_gcry_camellia_arm_tables): Remove
+ '.globl' export.
+
+2019-01-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Process CCM/EAX/GCM/Poly1305 AEAD cipher modes input in 24 KiB chucks.
+ + commit 3ee6588de8311b461ef8707c70ff86d2b252966d
+ * cipher/cipher-ccm.c (_gcry_cipher_ccm_encrypt)
+ (_gcry_cipher_ccm_decrypt): Process data in 24 KiB chunks.
+ * cipher/cipher-eax.c (_gcry_cipher_eax_encrypt)
+ (_gcry_cipher_eax_decrypt): Ditto.
+ * cipher/cipher-gcm.c (_gcry_cipher_gcm_encrypt)
+ (_gcry_cipher_gcm_decrypt): Ditto.
+ * cipher/cipher-poly1305.c (_gcry_cipher_poly1305_encrypt)
+ (_gcry_cipher_poly1305_decrypt): Ditto.
+
+ tests/benchmark: add Chacha20-Poly1305 benchmarking.
+ + commit 4871f11745f33c5c5051bfe6f325ac1c10764b04
+ * tests/benchmark.c (cipher_bench): Add Chacha20-Poly1305.
+
+ tests/benchmark: add --huge-buffers option for cipher tests.
+ + commit edde61f325e4b345f17c47369f3b6b1400656f04
+ * tests/benchmark.c (huge_buffers, cipher_encrypt, cipher_decrypt): New.
+ (cipher_bench): Add 'max_inlen' to modes structure; add huge buffers
+ mode selection.
+ (main): Add '--huge-buffers'.
+
+2018-12-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Add finalizer for rndjent.
+ + commit 3028a221d39c1b593ea0c1bcbfccd33959769692
+ * random/rand-internal.h (_gcry_rndjent_fini): New.
+ * random/rndjent.c (_gcry_rndjent_fini): New.
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Call the finalizer
+ when GCRYCTL_CLOSE_RANDOM_DEVICE.
+
+2018-12-12 Werner Koch <wk@gnupg.org>
+
+ secmem: Prepare for easier debugging.
+ + commit 876f7280e8604bc99ddda0526339ec5ec6b23c4b
+ * src/secmem.c (_gcry_secmem_dump_stats): Factor code out to ...
+ (secmem_dump_stats_internal): new.
+
+2018-12-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-aesni: interleave last CTR encryption round with xoring.
+ + commit 66d2b7fc17258f1424f4ca4adb1096e48b818bd0
+ * cipher/rijndael-aesni.c (do_aesni_ctr_8): Interleave aesenclast
+ with input xoring.
+
+2018-11-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Use explicit_bzero for wipememory.
+ + commit 168668228c7c49e70612cb4d602d6d603a2add2c
+ * configure.ac (AC_CHECK_FUNCS): Check for 'explicit_bzero'.
+ * src/g10lib.h (wipememory2): Use _gcry_fast_wipememory if _SET is
+ zero.
+ (_gcry_fast_wipememory): New.
+ (_gcry_wipememory2): Rename to...
+ (_gcry_fast_wipememory2): ...this.
+ * src/misc.c (_gcry_wipememory): New.
+ (_gcry_wipememory2): Rename to...
+ (_gcry_fast_wipememory2): ...this.
+ (_gcry_fast_wipememory2) [HAVE_EXPLICIT_BZERO]: Use explicit_bzero if
+ SET is zero.
+ (_gcry_burn_stack): Use _gcry_fast_wipememory.
+
+ Add clang target pragma for mixed C/assembly x86-64 implementations.
+ + commit 9d9c4fd18b445ff414d11678285d54af3afdb222
+ * cipher/cipher-gcm-intel-pclmul.c: Add target 'no-sse' attribute
+ pragma for clang.
+ * cipher/crc-intel-pclmul.c: Ditto.
+ * cipher/rijndael-aesni.c: Ditto.
+ * cipher/rijndael-ssse3-amd64.c: Ditto.
+ * cipher/sha1-intel-shaext.c: Ditto.
+ * cipher/sha256-intel-shaext.c: Ditto.
+
+ Optimizations for AES-NI OCB.
+ + commit b42de67f34871a2520cfe370af513f2aab6e4f75
+ * cipher/cipher-internal.h (gcry_cipher_handle): New pre-computed OCB
+ values L0L1 and L0L1L0; Swap dimensions for OCB L table.
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_set_nonce): Setup L0L1 and
+ L0L1L0 values.
+ (ocb_crypt): Process input in 24KiB chunks for better cache locality
+ for checksumming.
+ * cipher/rijndael-aesni.c (ALWAYS_INLINE): New macro for always
+ inlining functions, change all functions with 'inline' to use
+ ALWAYS_INLINE.
+ (NO_INLINE): New macro.
+ (aesni_prepare_2_6_variable, aesni_prepare_7_15_variable): Rename to...
+ (aesni_prepare_2_7_variable, aesni_prepare_8_15_variable): ...these and
+ adjust accordingly (xmm7 moved from *_7_15 to *_2_7).
+ (aesni_prepare_2_6, aesni_prepare_7_15): Rename to...
+ (aesni_prepare_2_7, aesni_prepare_8_15): ...these and adjust
+ accordingly.
+ (aesni_cleanup_2_6, aesni_cleanup_7_15): Rename to...
+ (aesni_cleanup_2_7, aesni_cleanup_8_15): ...these and adjust
+ accordingly.
+ (aesni_ocb_checksum): New.
+ (aesni_ocb_enc, aesni_ocb_dec): Calculate OCB offsets in parallel
+ with help of pre-computed offsets L0+L1 ja L0+L1+L0; Do checksum
+ calculation as separate pass instead of inline; Use NO_INLINE.
+ (_gcry_aes_aesni_ocb_auth): Calculate OCB offsets in parallel
+ with help of pre-computed offsets L0+L1 ja L0+L1+L0.
+ * cipher/rijndael-internal.h (RIJNDAEL_context_s) [USE_AESNI]: Add
+ 'use_avx2' and 'use_avx'.
+ * cipher/rijndael.c (do_setkey) [USE_AESNI]: Set 'use_avx2' if
+ Intel AVX2 HW feature is available and 'use_avx' if Intel AVX HW
+ feature is available.
+ * tests/basic.c (do_check_ocb_cipher): New test vector; increase
+ size of temporary buffers for new test vector.
+ (check_ocb_cipher_largebuf_split): Make test plaintext non-uniform
+ for better checksum testing.
+ (check_ocb_cipher_checksum): New.
+ (check_ocb_cipher_largebuf): Call check_ocb_cipher_checksum.
+ (check_ocb_cipher): New expected tags for check_ocb_cipher_largebuf
+ test runs.
+
+2018-11-19 Andreas Metzler <ametzler@bebt.de>
+
+ doc: Fix library initialization examples.
+ + commit af0bbdb9019e0b4a72e87e8b1b4a55506d349834
+
+
+2018-11-14 Werner Koch <wk@gnupg.org>
+
+ random: Initialize variable as requested by valgrind.
+ + commit aa686dfc9b563ff79c01d2f8560b88f69c42ecba
+ random/jitterentropy-base.c: Init.
+
+2018-11-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ libgcrypt.m4: Prefer gpgrt-config to SYSROOT support.
+ + commit 852245390ef7fd8ca9e36010886a4cf42cf710bf
+ * libgcrypt.m4: Move SYSROOT support after check of GPGRT_CONFIG.
+
+ build: Update autogen.rc.
+ + commit bea193446351c24b10a4342466978d57bd53f599
+ * autogen.rc: Remove obsolete --with-gpg-error-prefix option.
+
+2018-11-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix 'variable may be used uninitialized' warning for CTR mode.
+ + commit 3f76319803a4abcd33fa29a0ac39f8ed9d646226
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Set N to BLOCKSIZE
+ before counter loop.
+
+2018-11-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix inlining of ocb_get_l for x86 AES implementations.
+ + commit 9d6431604b5ee21572c1c2cfa8376e6d81162cbb
+ * cipher/rijndael-aesni.c (aes_ocb_get_l): New.
+ (aesni_ocb_enc, aesni_ocb_dec, _gcry_aes_aesni_ocb_auth): Use
+ 'aes_ocb_get_l'.
+ * cipher/rijndael-ssse3-amd4.c (aes_ocb_get_l): New.
+ (ssse3_ocb_enc, ssse3_ocb_dec, _gcry_aes_ssse3_ocb_auth): Use
+ 'aes_ocb_get_l'.
+
+2018-11-05 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ stdmem: free: only call _gcry_secmem_free if needed.
+ + commit 23f56d3359ca7d152aa87874ddd6305171a91408
+ * src/stdmem.c (_gcry_private_free): Check if memory is secure before
+ calling _gcry_secmem_free to avoid unnecessarily taking secmem lock.
+
+ secmem: fix potential memory visibility issue.
+ + commit d6c6680ca31c05bafbb8becda56da051346eceb3
+ * configure.ac (gcry_cv_have_sync_synchronize): New check.
+ * src/secmem.c (pooldesc_s): Make next pointer volatile.
+ (memory_barrier): New.
+ (_gcry_secmem_malloc_internal): Insert memory barrier between
+ pool->next and mainpool.next assigments.
+ (_gcry_private_is_secure): Update comments.
+
+ wipememory: use memset for non-constant length or large buffer wipes.
+ + commit 4faeaa1cbd235a2560fa04a8ac3766a07029acd8
+ * src/g10lib.h (CONSTANT_P): New.
+ (_gcry_wipememory2): New prototype.
+ (wipememory2): Use _gcry_wipememory2 if _len not constant expression or
+ lenght is larger than 64 bytes.
+ (FASTWIPE_T, FASTWIPE_MULT, fast_wipememory2_unaligned_head): Remove.
+ (fast_wipememory2): Always handle buffer as unaligned.
+ * src/misc.c (__gcry_burn_stack): Move memset_ptr variable to...
+ (memset_ptr): ... here. New.
+ (_gcry_wipememory2): New.
+
+ Change buf_cpy and buf_xor* functions to use buf_put/buf_get helpers.
+ + commit 0068d41d9304ebcdb2caba1fa8848925e2bfaac7
+ * cipher/bufhelp.h (BUFHELP_FAST_UNALIGNED_ACCESS)
+ (bufhelp_int_s, buf_xor_1): Remove.
+ (buf_cpy, buf_xor, buf_xor_2dst, buf_xor_n_copy_2): Use
+ buf_put/buf_get helpers to handle unaligned memory accesses.
+
+ rijndael: fix unused parameter warning.
+ + commit 30e783ec487466132324673f197d36b85a91b060
+ * cipher/rijndael.c (do_setkey): Silence unused 'hd' warning.
+
+ mpi/longlong.h: enable inline assembly for powerpc64.
+ + commit ec49013d23d9a7b874c42d77ceb08bd313ba69e1
+ * mpi/longlong.h [__powerpc__ && W_TYPE_SIZE == 64]: Remove '#if 0'.
+
+ Change remaining users of _gcry_fips_mode to use fips_mode.
+ + commit 2aece89d3967e692743541cea857f2e4771b0b62
+ * src/fips.c (_gcry_fips_mode): Remove.
+ (_gcry_enforced_fips_mode, _gcry_inactivate_fips_mode)
+ (_gcry_is_fips_mode_inactive): Use fips_mode.
+ * src/g10lib.h (_gcry_fips_mode): Remove.
+
+2018-11-02 NIIBE Yutaka <gniibe@fsij.org>
+
+ aarch64: mpi: Distribute the header file as a part of source.
+ + commit a2e0cb1542818ad8a71de34ccbf191adab0a0b86
+ * mpi/Makefile.am (EXTRA_libmpi_la_SOURCES): Add asm-common-aarch64.h.
+
+ build: Fix GCRYPT_HWF_MODULES.
+ + commit f7395338d71d4d82180a11707fd6e77787162e24
+ * configure.ac (GCRYPT_HWF_MODULES): Add libgcrypt_la- prefix.
+
+ build: Update gpg-error.m4 and libgcrypt.m4.
+ + commit f46286851158878d5041ac5381b2807ecec541eb
+ * m4/gpg-error.m4: Update to 2018-11-02.
+ * src/libgrypt.m4: Add AC_MSG_NOTICE.
+ Bump the version date.
+
+2018-10-29 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Update gpg-error.m4 and ksba.m4.
+ + commit 4a4d4a284ca996df874e2534f8529c1611289943
+ * m4/gpg-error.m4: Update to 2018-10-29.
+ * src/libgrypt.m4: Follow the change of gpgrt-config.
+ Bump the version date.
+
+2018-10-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix missing global initialization in fips_is_operational.
+ + commit 6e669e09603e5a98b59dcf35f77f346db6c81eac
+ * src/g10lib.h (_gcry_global_any_init_done): New extern.
+ (fips_is_operational): Check for _gcry_global_any_init_done and call
+ _gcry_global_is_operational.
+ * src/global.c (any_init_done): Rename to ...
+ (_gcry_global_any_init_done): ... this and make externally available.
+
+2018-10-26 Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+
+ random: use getrandom() on Linux where available.
+ + commit 7e662680c170968661ee0105d132813f8281d229
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): use the
+ getrandom() syscall on Linux if it exists, regardless of what kind of
+ entropy was requested.
+
+2018-10-26 Werner Koch <wk@gnupg.org>
+
+ random: Make sure to re-open /dev/random after a fork.
+ + commit 319f55e6e5793c59f1ba4cfe481b562bca42194d
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Detect fork and
+ re-open devices.
+
+ primes: Avoid leaking bits of the prime test to pageable memory.
+ + commit 2e2e68ad4874a4678cfbe452b70ae987e0402eca
+ * cipher/primegen.c (gen_prime): Allocate MODS in secure memory.
+
+2018-10-26 NIIBE Yutaka <gniibe@fsij.org>
+
+ libgcrypt.m4: Better compatibility support.
+ + commit a755bd0ea09af2ae5a66e3f5aeb8707673c687cf
+ * src/gpg-error.m4: Update.
+ * src/libgcrypt.m4: Don't assume libgcrypt-config is newer.
+
+ build: Fix libgcrypt.m4.
+ + commit 630ece1b7e0a94442bca91d8e96d9b1d4cd3ec66
+ * src/libgcrypt.m4: Use AC_PATH_PROG to detect libgcrypt-config.
+
+ build: Relax build requirements.
+ + commit 8e5641ed65f86783542d5caccdeeee42eeb9457c
+ * m4/gpg-error.m4: Update from libgpg-error 1.33.
+ * src/libgcrypt.m4: Don't require AM_PATH_GPG_ERROR. Use GPGRT_CONFIG
+ instead of libgcrypt-config when it is confirmed that it is available
+ and working well.
+ * configure.ac (AM_PATH_GPG_ERROR): No requirement for newer version
+ (It was because of new gpgrt-config which supports *.pc files).
+
+2018-10-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Require libgpg-error >= 1.33.
+ + commit b376dc2abbb208b10bbc76998ff39adb2f301905
+ * configure.ac (NEED_GPG_ERROR_VERSION): Require 1.33.
+ * m4/gpg-error.m4: Update from libgpg-error 1.33.
+ * src/libgcrypt.m4: Bump version date.
+ Use --variable option.
+
+2018-10-24 Werner Koch <wk@gnupg.org>
+
+ build: Add release make target.
+ + commit 03bb25ee7ed6f1076bf788ab981ca68672880daa
+ * Makefile.am (release, sign-release): New targets.
+
+ build: Make distcheck work again.
+ + commit b0ad66e48c46b79af69349606e276cf0a6b9a020
+ * cipher/Makefile.am: Prettified source file lists.
+ EXTRA_libcipher_la_SOURCES): Add missing asm-common-aarch64.h.
+
+ Fix memory leak in secmem in out of core conditions.
+ + commit f74687fd43f5772a372f54031d5a9527597f4ce4
+ * src/secmem.c (_gcry_secmem_malloc_internal): Release pool descriptor
+ if the pool could not be allocated.
+
+ ecc: Fix memory leak in the error case of ecc_encrypt_raw.
+ + commit e57e75ea517f32109b508113f18298fc69fd1192
+ * cipher/ecc.c (ecc_encrypt_raw): Add proper error cleanup in the main
+ block.
+
+ ecc: Fix possible memory leakage in parameter check of eddsa.
+ + commit 149ceb3cae03d0385341d32430aa5ae57de90007
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_verify): Fix mem leak.
+
+2018-10-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Fix libgcrypt.pc.
+ + commit 0e071372fc0e6fed4a449955ed0789803ba5e709
+ * src/libgcrypt.pc.in: Fix typo.
+
+ build: Compatibility to pkg-config.
+ + commit c60eabb11435665fa84a3a82b2a15f48870cc4d7
+ * src/libgcrypt-config.in: Support --variable and --modversion.
+
+ build: Make libgcrypt.m4 use gpg-error-config.
+ + commit 7da887d69d72ea0ea0d106054c48a8c03e242a18
+ * src/libgcrypt.m4: Use gpg-error-config.
+
+ build: Provide libgcrypt.pc, generated by configure.
+ + commit 97194b422bc89a6137f4e218d4cdee118c63e96e
+ * configure.ac: Generate src/libgcrypt.pc.
+ * src/Makefile.am (pkgconfigdir, pkgconfig_DATA): New.
+ (EXTRA_DIST): Add libgcrypt.pc.in.
+ * src/libgcrypt-config.in: Use @PACKAGE_VERSION@.
+ * src/libgcrypt.pc.in: New.
+
+ build: Update gpg-error.m4 from libgpg-error.
+ + commit 5b1febb5e40d92072bef425bd9e63f7a07edd57e
+ * m4/gpg-error.m4: Update from libgpg-error 1.33.
+
+ build: Don't default to underscore=yes for cross-build.
+ + commit 0f4545b441b6fbdd6e9c4e95f5f2a367483e78ad
+ * acinclude.m4: Don't set ac_cv_sys_symbol_underscore
+ for cross build.
+
+2018-10-23 Werner Koch <wk@gnupg.org>
+
+ ecc: Fix potential unintended freeing of an internal param.
+ + commit e2da4e8dee4b371804f3b2659b53431fb6380d93
+ * cipher/ecc-curves.c (_gcry_ecc_get_mpi): Fix c+p error
+
+ sexp: Fix uninitialized use of a var in the error case.
+ + commit 9f2c7ec4d8b07e82663ad084c90c016d3c3b80c2
+ * src/sexp.c (_gcry_sexp_vextract_param): Initialize L1.
+
+2018-10-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ build: Let configure create the VERSION file.
+ + commit 0f2c6ce2c9504c6df435463243edaa669e57b109
+ * autogen.sh: Update from libgpg-error.
+ * configure.ac: Use mym4_versoin to create VERSION file.
+ * Makefile.am (dist-hook): Do not create VERSION file.
+ (EXTRA_DIST): Add VERSION.
+
+2018-07-21 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add size optimized cipher block copy and xor functions.
+ + commit 86e5e06a97ae13b8bbf6923ecc76e02b9c429b46
+ * cipher/bufhelp.h (buf_get_he32, buf_put_he32, buf_get_he64)
+ (buf_put_he64): New.
+ * cipher/cipher-internal.h (cipher_block_cpy, cipher_block_xor)
+ (cipher_block_xor_1, cipher_block_xor_2dst, cipher_block_xor_n_copy_2)
+ (cipher_block_xor_n_copy): New.
+ * cipher/cipher-gcm-intel-pclmul.c
+ (_gcry_ghash_setup_intel_pclmul): Use assembly for swapping endianness
+ instead of buf_get_be64 and buf_cpy.
+ * cipher/blowfish.c: Use new cipher_block_* functions for cipher block
+ sized buf_cpy/xor* operations.
+ * cipher/camellia-glue.c: Ditto.
+ * cipher/cast5.c: Ditto.
+ * cipher/cipher-aeswrap.c: Ditto.
+ * cipher/cipher-cbc.c: Ditto.
+ * cipher/cipher-ccm.c: Ditto.
+ * cipher/cipher-cfb.c: Ditto.
+ * cipher/cipher-cmac.c: Ditto.
+ * cipher/cipher-ctr.c: Ditto.
+ * cipher/cipher-eax.c: Ditto.
+ * cipher/cipher-gcm.c: Ditto.
+ * cipher/cipher-ocb.c: Ditto.
+ * cipher/cipher-ofb.c: Ditto.
+ * cipher/cipher-xts.c: Ditto.
+ * cipher/des.c: Ditto.
+ * cipher/rijndael.c: Ditto.
+ * cipher/serpent.c: Ditto.
+ * cipher/twofish.c: Ditto.
+
+2018-07-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ RFC-8439 was published.
+ + commit 9660c3fafd732b1857bb2697c6f43aed077b9ad6
+ * cipher/cipher-poly1305.c: Update RFC reference.
+
+2018-06-19 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Clean-up implementation selection for SHA1 and SHA2.
+ + commit 8a44c55d2fb758f726b8b436aa5c0b88a6c6f112
+ * cipher/sha1.c (ASM_EXTRA_STACK): Increase by sizeof(void*)*4.
+ (do_sha1_transform_amd64_ssse3, do_sha1_transform_amd64_avx)
+ (do_sha1_transform_amd64_avx_bmi2, do_sha1_transform_intel_shaext)
+ (do_sha1_transform_armv7_neon, do_sha1_transform_armv8_ce): New.
+ (transform_blk, transform): Merge to ...
+ (do_transform_generic): ... this and remove calls to assembly
+ implementations.
+ (sha1_init): Select hd->bctx.bwrite based on HW features.
+ (_gcry_sha1_mixblock, sha1_final): Call hd->bctx.bwrite instead of
+ transform.
+ * cipher/sha1.h (SHA1_CONTEXT): Remove implementation selection bits.
+ * cipher/sha256.h (SHA256_CONTEXT): Remove implementation selection
+ bits.
+ (ASM_EXTRA_STACK): Increase by sizeof(void*)*4.
+ (do_sha256_transform_amd64_ssse3, do_sha256_transform_amd64_avx)
+ (do_sha256_transform_amd64_avx2, do_sha256_transform_intel_shaext)
+ (do_sha256_transform_armv8_ce): New.
+ (transform_blk, transform): Merge to ...
+ (do_transform_generic): ... this and remove calls to assembly
+ implementations.
+ (sha256_init, sha224_init): Select hd->bctx.bwrite based on HW
+ features.
+ (sha256_final): Call hd->bctx.bwrite instead of transform.
+ * cipher/sha512-armv7-neon.S
+ (_gcry_sha512_transform_armv7_neon): Return zero.
+ * cipher/sha512.h (SHA512_CONTEXT): Remove implementation selection
+ bits.
+ (ASM_EXTRA_STACK): Increase by sizeof(void*)*4.
+ (do_sha512_transform_armv7_neon, do_sha512_transform_amd64_ssse3)
+ (do_sha512_transform_amd64_avx, do_sha512_transform_amd64_avx2): New.
+ [USE_ARM_ASM] (do_transform_generic): New.
+ (transform_blk, transform): Merge to ...
+ [!USE_ARM_ASM] (do_transform_generic): ... this and remove calls to
+ assembly implementations.
+ (sha512_init, sha384_init): Select hd->bctx.bwrite based on HW
+ features.
+ (sha512_final): Call hd->bctx.bwrite instead of transform.
+
+ Add hash_buffer and hash_buffers for SHA-224, SHA-385, SHA3 and BLAKE2.
+ + commit 59c4e344eec61cff45185e1caea6815b3266a0f8
+ * cipher/blake2.c (DEFINE_BLAKE2_VARIANT): Add hash_buffer and
+ hash_buffers functions for BLAKE2 variants.
+ * cipher/keccak.c (_gcry_sha3_hash_buffer, _gcry_sha3_hash_buffers)
+ (_gcry_sha3_224_hash_buffer, _gcry_sha3_224_hash_buffers)
+ (_gcry_sha3_256_hash_buffer, _gcry_sha3_256_hash_buffers)
+ (_gcry_sha3_384_hash_buffer, _gcry_sha3_384_hash_buffers)
+ (_gcry_sha3_512_hash_buffer, _gcry_sha3_512_hash_buffers): New.
+ * cipher/sha256.c (_gcry_sha224_hash_buffer)
+ (_gcry_sha224_hash_buffers): New.
+ * cipher/sha512.c (_gcry_sha384_hash_buffer)
+ (_gcry_sha384_hash_buffers): New.
+
+ Add hash_buffer and hash_buffers pointers to message digest spec.
+ + commit b136703ea0ddbd9fec6dfd1f8dfda8373653ba39
+ * src/cipher-proto.h (gcry_md_hash_buffer_t)
+ (gcry_md_hash_buffers_t): New.
+ (gcry_md_spec): Add hash_buffer and hash_buffers.
+ * cipher/md.c (_gcry_md_hash_buffer, _gcry_md_hash_buffers): Use
+ hash_buffer/hash_buffers from MD spec instead of hard-coding supported
+ algorithms.
+ * cipher/blake2.c: Add NULL to MD spec hash_buffer and hash_buffers
+ pointers.
+ * cipher/crc.c: Ditto.
+ * cipher/gostr3411-94.c: Ditto.
+ * cipher/keccak.c: Ditto.
+ * cipher/md2.c: Ditto.
+ * cipher/md4.c: Ditto.
+ * cipher/md5.c: Ditto.
+ * cipher/stribog.c: Ditto.
+ * cipher/tiger.c: Ditto.
+ * cipher/whirlpool.c: Ditto.
+ * cipher/rmd160.c (_gcry_rmd160_hash_buffers): New.
+ (_gcry_digest_spec_rmd160): Add hash_buffer and hash_buffers functions.
+ * cipher/sha1.c (_gcry_digest_spec_sha1): Add hash_buffer and
+ hash_buffers functions.
+ * cipher/sha256.c (_gcry_digest_spec_sha256): Add hash_buffer and
+ hash_buffers functions.
+ (_gcry_digest_spec_sha224): Add NULL pointers for hash_buffer and
+ hash_buffers.
+ * cipher/sha512.c (_gcry_digest_spec_sha1): Add hash_buffer and
+ hash_buffers functions.
+ (_gcry_digest_spec_sha384): Add NULL pointers for hash_buffer and
+ hash_buffers.
+ * cipher/sm3.c (_gcry_digest_spec_sha1): Add hash_buffer and
+ hash_buffers functions.
+
+ AES: setup cipher object bulk routines with optimized versions.
+ + commit a15c1def7e0f170f6663635db84fecab1cbfcca7
+ * cipher/rijndael-aesni.c
+ (_gcry_aes_aesni_prepare_decryption): Rename...
+ (do_aesni_prepare_decryption): .. to this.
+ (_gcry_aes_aesni_prepare_decryption): New.
+ (_gcry_aes_aesni_cfb_enc, _gcry_aes_aesni_cbc_enc)
+ (_gcry_aes_aesni_ctr_enc, _gcry_aes_aesni_cfb_dec)
+ (_gcry_aes_aesni_cbc_dec): Reorder parameters to match bulk
+ operations.
+ (_gcry_aes_aesni_cbc_dec, aesni_ocb_dec)
+ (_gcry_aes_aesni_xts_dec): Check and prepare decryption.
+ (_gcry_aes_aesni_ocb_crypt, _gcry_aes_aesni_ocb_auth): Change return
+ type to size_t.
+ * cipher/rijndael-armv8-ce.c
+ (_gcry_aes_armv8_ce_cfb_enc, _gcry_aes_armv8_ce_cbc_enc)
+ (_gcry_aes_armv8_ce_ctr_enc, _gcry_aes_armv8_ce_cfb_dec)
+ (_gcry_aes_armv8_ce_cbc_dec): Reorder parameters to match bulk
+ operations.
+ (_gcry_aes_armv8_ce_cbc_dec, _gcry_aes_armv8_ce_ocb_crypt)
+ (_gcry_aes_armv8_ce_xts_dec): Check and prepare decryption.
+ (_gcry_aes_armv8_ce_ocb_crypt, _gcry_aes_armv8_ce_ocb_auth): Change
+ return type to size_t.
+ * cipher/rijndael-ssse3-amd64.c
+ (_gcry_ssse3_prepare_decryption): Rename...
+ (do_ssse3_prepare_decryption): .. to this.
+ (_gcry_ssse3_prepare_decryption): New.
+ (_gcry_aes_ssse3_cfb_enc, _gcry_aes_ssse3_cbc_enc)
+ (_gcry_aes_ssse3_ctr_enc, _gcry_aes_ssse3_cfb_dec)
+ (_gcry_aes_ssse3_cbc_dec): Reorder parameters to match bulk
+ operations.
+ (_gcry_aes_ssse3_cbc_dec, ssse3_ocb_dec): Check and prepare decryption.
+ (_gcry_aes_ssse3_ocb_crypt, _gcry_aes_ssse3_ocb_auth): Change return
+ type to size_t.
+ * cipher/rijndael.c
+ (_gcry_aes_aesni_cfb_enc, _gcry_aes_aesni_cbc_enc)
+ (_gcry_aes_aesni_ctr_enc, _gcry_aes_aesni_cfb_dec)
+ (_gcry_aes_aesni_cbc_dec, _gcry_aes_aesni_ocb_crypt)
+ (_gcry_aes_aesni_ocb_auth, _gcry_aes_aesni_xts_crypt)
+ (_gcry_aes_ssse3_cfb_enc, _gcry_aes_ssse3_cbc_enc)
+ (_gcry_aes_ssse3_ctr_enc, _gcry_aes_ssse3_cfb_dec)
+ (_gcry_aes_ssse3_cbc_dec, _gcry_aes_ssse3_ocb_crypt)
+ (_gcry_aes_ssse3_ocb_auth, _gcry_aes_ssse3_xts_crypt)
+ (_gcry_aes_armv8_ce_cfb_enc, _gcry_aes_armv8_ce_cbc_enc)
+ (_gcry_aes_armv8_ce_ctr_enc, _gcry_aes_armv8_ce_cfb_dec)
+ (_gcry_aes_armv8_ce_cbc_dec, _gcry_aes_armv8_ce_ocb_crypt)
+ (_gcry_aes_armv8_ce_ocb_auth, _gcry_aes_armv8_ce_xts_crypt): Change
+ prototypes to match bulk operations.
+ (do_setkey): Setup bulk operations with optimized implementations.
+ (_gcry_aes_cfb_enc, _gcry_aes_cbc_enc, _gcry_aes_ctr_enc)
+ (_gcry_aes_cfb_dec, _gcry_aes_cbc_dec, _gcry_aes_ocb_crypt)
+ (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth, _gcry_aes_xts_crypt): Update
+ usage to match new prototypes, avoid prefetch and decryption
+ preparation on optimized code paths.
+
+ Pass cipher object pointer to setkey functions.
+ + commit ca21a24808efa5d562ac91f683504ae0d6dfa69f
+ * cipher/cipher.c (cipher_setkey): Pass cipher object pointer to
+ cipher's setkey function.
+ * cipher/arcfour.c: Add gcry_cipher_hd_t parameter for setkey
+ functions and update selftests to pass NULL pointer.
+ * cipher/blowfish.c: Ditto.
+ * cipher/camellia-glue.c: Ditto.
+ * cipher/cast5.c: Ditto.
+ * cipher/chacha20.c: Ditto.
+ * cipher/cipher-selftest.c: Ditto.
+ * cipher/des.c: Ditto.
+ * cipher/gost28147.c: Ditto.
+ * cipher/idea.c: Ditto.
+ * cipher/rfc2268.c: Ditto.
+ * cipher/rijndael.c: Ditto.
+ * cipher/salsa20.c: Ditto.
+ * cipher/seed.c: Ditto.
+ * cipher/serpent.c: Ditto.
+ * cipher/twofish.c: Ditto.
+ * src/cipher-proto.h: Ditto.
+
+ Add fast path for _gcry_fips_is_operational.
+ + commit b6e6ace324440f564df664e27f8276ef01f76795
+ * src/fips.c (no_fips_mode_required): Rename to...
+ (_gcry_no_fips_mode_required): ...this and make externally available.
+ * src/g10lib.h (_gcry_no_fips_mode_required): New extern.
+ (fips_mode): Inline _gcry_fips_mode to macro, use
+ _gcry_no_fips_mode_required directly.
+ (fips_is_operational): Inline fips_mode check from
+ _gcry_fips_in_operational.
+
+ Access cipher mode routines through routine pointers.
+ + commit 233e2049a2cc1c1110f541b6a7ef145a737e2c65
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add function pointers
+ for mode operations.
+ (_gcry_cipher_xts_crypt): Remove.
+ (_gcry_cipher_xts_encrypt, _gcry_cipher_xts_decrypt): New.
+ * cipher/cipher-xts.c (_gcry_cipher_xts_encrypt)
+ (_gcry_cipher_xts_decrypt): New.
+ * cipher/cipher.c (_gcry_cipher_setup_mode_ops): New.
+ (_gcry_cipher_open_internal): Setup mode routines.
+ (cipher_encrypt, cipher_decrypt): Remove.
+ (do_stream_encrypt, do_stream_decrypt, do_encrypt_none_unknown)
+ (do_decrypt_none_unknown): New.
+ (_gcry_cipher_encrypt, _gcry_cipher_decrypt, _gcry_cipher_setiv)
+ (_gcry_cipher_authenticate, _gcry_cipher_gettag)
+ (_gcry_cipher_checktag): Adapted to use mode routines through pointers.
+
+ Add separate handlers for CBC-CTS variant.
+ + commit 87d8caa47e00f1b1cea968fe38cf30c0ccc9749c
+ * cipher/cipher-cbc.c (cbc_encrypt_inner, cbc_decrypt_inner)
+ (_gcry_cipher_cbc_cts_encrypt, _gcry_cipher_cbc_cts_decrypt): New.
+ (_gcry_cipher_cbc_encrypt, _gcry_cipher_cbc_decrypt): Remove CTS
+ handling.
+ * cipher/cipher-internal.h (_gcry_cipher_cbc_cts_encrypt)
+ (_gcry_cipher_cbc_cts_decrypt): New.
+ * cipher/cipher.c (cipher_encrypt, cipher_decrypt): Call CBC-CTS
+ handler if CBC-CTS flag is set.
+
+ Avoid division by spec->blocksize in cipher mode handlers.
+ + commit f5168091c1930e948af8f25da11cad5dfa62c7ba
+ * cipher/cipher-internal.h (_gcry_blocksize_shift): New.
+ * cipher/cipher-cbc.c (_gcry_cipher_cbc_encrypt)
+ (_gcry_cipherp_cbc_decrypt): Use bit-level operations instead of
+ division to get number of blocks and check input length against
+ blocksize.
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb_encrypt)
+ (_gcry_cipher_cfb_decrypt): Ditto.
+ * cipher/cipher-cmac.c (_gcry_cmac_write): Ditto.
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_crypt): Ditto.
+ * cipher/cipher-ofb.c (_gcry_cipher_ofb_encrypt)
+ (_gcry_cipher_ofb_decrypt): Ditto.
+
+ Fix CBC-CTS+CBC-MAC flag check.
+ + commit a69021535b472556651eb2bab65666206c56c24b
+ * cipher/cipher.c (_gcry_cipher_open_internal): Check flags separately
+ instead of AND masking two flags to zero.
+
+ tests/basic: silence GCC-8 warning.
+ + commit 2a94bdfc0538a340a24c1a7b524bb0c5f606457c
+ * tests/basic.c (check_ofb_cipher, check_stream_cipher): Change
+ tv[].data[].inlen type from signed to unsigned integer.
+
+2018-06-19 Will Dietz <w@wdtz.org>
+
+ random: Fix hang of _gcry_rndjent_get_version.
+ + commit 355f5b7f69075c010fe33aa5b10ac60c08fae0c7
+ * random/rndjent.c (_gcry_rndjent_get_version): Move locking.
+
+2018-06-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Add blinding for ECDSA.
+ + commit 9010d1576e278a4274ad3f4aa15776c28f6ba965
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Blind secret D with
+ randomized nonce B.
+
+2018-06-06 Werner Koch <wk@gnupg.org>
+
+ ecc: Improve gcry_mpi_ec_curve_point.
+ + commit 7b6c2afd699e889f5f054cc3d202a61bd0ee1dcf
+ * mpi/ec.c (_gcry_mpi_ec_curve_point): Check range of coordinates.
+ * tests/t-mpi-point.c (point_on_curve): New.
+
+2018-06-05 Werner Koch <wk@gnupg.org>
+
+ mpi: New internal function _gcry_mpi_cmpabs.
+ + commit 6606ae44e0de1069b29dd4215ee9748280940e1b
+ * mpi/mpi-cmp.c (_gcry_mpi_cmp): Factor out to ...
+ (do_mpi_cmp): New. Add arg absmode.
+ (_gcry_mpi_cmpabs): New.
+ * src/gcrypt-int.h (mpi_cmpabs): New macro.
+
+2018-04-29 Werner Koch <wk@gnupg.org>
+
+ build: Convince gcc not to delete NULL ptr checks.
+ + commit 61dbb7c08ab11c10060e193b52e3e1d2ec6dd062
+ * configure.ac: Try to use -fno-delete-null-pointer-checks.
+
+2018-04-28 Werner Koch <wk@gnupg.org>
+
+ prime: Avoid rare assertion failure in gcry_prime_check.
+ + commit f3362f10f6f671246c38115ed12b0047966c200e
+ * cipher/primegen.c (is_prime): Don't fail on the assert X > 1.
+
+2018-04-17 Werner Koch <wk@gnupg.org>
+
+ mpi: Fix for buidling for MIPS64 with Clang.
+ + commit e7ae0ae243c8978a67c802169183187d88557be8
+ * mpi/longlong.h [MIPS64][__clang__]: Use the C version like we
+ already do for 32 bit MIPS.
+
+2018-04-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ hmac: Use xtrymalloc.
+ + commit 3e3b520fb32a37c5c23762531a7b3168e112ac36
+ * src/hmac256.c (_gcry_hmac256_new): Use xtrymalloc.
+ (_gcry_hmac256_file): Likewise.
+
+2018-04-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ basic_all_hwfeature_combinations.sh: use $njobs to limit parallel tasks.
+ + commit 5e01705ca90830c27a4cbd8bad41243915f4538a
+ * tests/basic_all_hwfeature_combinations.sh: Use $njobs to limit
+ parallel tasks instead of fixed number "8".
+
+ Faster look-up for spec by algo for digests, ciphers and MAC.
+ + commit 634a85412a4073aa1890589ce5e97eac7b0f3ca3
+ * cipher/cipher.c (cipher_list_algo0, cipher_list_algo301): New cipher
+ spec lists with same order and spacing as 'gcry_cipher_algos'
+ enumeration.
+ (spec_from_algo): Use new spec lists for faster look-up.
+ * cipher/mac.c (mac_list_algo101, mac_list_algo201, mac_list_algo401)
+ (mac_list_algo501): New MAC spec lists with same order and spacing as
+ 'gcry_mac_algos' enumeration.
+ (spec_from_algo): Use new spec lists for faster look-up.
+ * cipher/md.c (digest_list_algo0, digest_list_algo301): New digest
+ spec lists with same order and spacing as 'gcry_md_algos'
+ enumeration.
+ (spec_from_algo): Use new spec lists for faster look-up.
+
+ Fix building with BLAKE2 disabled.
+ + commit 35b59d0ea52e8a1c30c43554dc4dbca97da4bf87
+ * cipher/md.c (md_setkey): Enclose Blake2 part with USE_BLAKE2.
+
+ Add missing BLAKE2, SM3 and GOSTR3411_CP to MAC-HMAC interface.
+ + commit 52e52eb0e3e5541cfc86e04c5047500db5d538b7
+ * cipher/mac-hmac.c (map_mac_algo_to_md): Add GOSTR3411_CP, BLAKE2 and
+ SM3.
+ (_gcry_mac_type_spec_hmac_gost3411_cp)
+ (_gcry_mac_type_spec_hmac_blake2b_512)
+ (_gcry_mac_type_spec_hmac_blake2b_384)
+ (_gcry_mac_type_spec_hmac_blake2b_256)
+ (_gcry_mac_type_spec_hmac_blake2b_160)
+ (_gcry_mac_type_spec_hmac_blake2s_256)
+ (_gcry_mac_type_spec_hmac_blake2s_224)
+ (_gcry_mac_type_spec_hmac_blake2s_160)
+ (_gcry_mac_type_spec_hmac_blake2s_128)
+ (_gcry_mac_type_spec_hmac_sm3): New.
+ * cipher/mac-internal.h (_gcry_mac_type_spec_hmac_gost3411_cp)
+ (_gcry_mac_type_spec_hmac_blake2b_512)
+ (_gcry_mac_type_spec_hmac_blake2b_384)
+ (_gcry_mac_type_spec_hmac_blake2b_256)
+ (_gcry_mac_type_spec_hmac_blake2b_160)
+ (_gcry_mac_type_spec_hmac_blake2s_256)
+ (_gcry_mac_type_spec_hmac_blake2s_224)
+ (_gcry_mac_type_spec_hmac_blake2s_160)
+ (_gcry_mac_type_spec_hmac_blake2s_128)
+ (_gcry_mac_type_spec_hmac_sm3): New.
+ * cipher/mac.c (mac_list): Add GOSTR3411_CP, BLAKE2 and SM3.
+ * src/gcrypt.h.in (GCRY_MAC_HMAC_GOSTR3411_CP)
+ (GCRY_MAC_HMAC_BLAKE2B_512, GCRY_MAC_HMAC_BLAKE2B_384)
+ (GCRY_MAC_HMAC_BLAKE2B_256, GCRY_MAC_HMAC_BLAKE2B_160)
+ (GCRY_MAC_HMAC_BLAKE2S_256, GCRY_MAC_HMAC_BLAKE2S_224)
+ (GCRY_MAC_HMAC_BLAKE2S_160, GCRY_MAC_HMAC_BLAKE2S_128)
+ (GCRY_MAC_HMAC_SM3): New.
+
+2018-04-10 NIIBE Yutaka <gniibe@fsij.org>
+
+ random: Protect another use of jent_rng_collector.
+ + commit 0de2a22fcf6607d0aecb550feefa414cee3731b2
+ * random/rndjent.c (_gcry_rndjent_get_version): Lock the access.
+
+2018-03-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ aarch64/assembly: only use the lower 32 bit of an int parameters.
+ + commit 9b58e4a03ba3aeff7bae3f40da706977870c9649
+ * cipher/camellia-aarch64.S (_gcry_camellia_arm_encrypt_block)
+ (__gcry_camellia_arm_decrypt_block): Make comment section about input
+ registers match usage.
+ * cipher/rijndael-armv8-aarch64-ce.S (_gcry_aes_ocb_auth_armv8_ce): Use
+ 'w12' and 'w7' instead of 'x12' and 'x7'.
+ (_gcry_aes_xts_enc_armv8_ce, _gcry_aes_xts_dec_armv8_ce): Fix function
+ prototype in comments.
+ * mpi/aarch64/mpih-add1.S: Use 32-bit registers for 32-bit mpi_size_t
+ parameters.
+ * mpi/aarch64/mpih-mul1.S: Ditto.
+ * mpi/aarch64/mpih-mul2.S: Ditto.
+ * mpi/aarch64/mpih-mul3.S: Ditto.
+ * mpi/aarch64/mpih-sub1.S: Ditto.
+
+ poly1305: silence compiler warning on clang/aarch64.
+ + commit 8cdb010f04528703a502344e00d52447de12547d
+ * cipher/poly1305.c (MUL_MOD_1305_64): cast zero constant to 64-bits.
+
+2018-03-28 Martin Storsjö <martin@martin.st>
+
+ aarch64: Enable building the aarch64 cipher assembly for windows.
+ + commit 0de2191a07d69ef1fa34ca4c5d5fc4985ff7b4c4
+ * cipher/asm-common-aarch64.h: New.
+ * cipher/camellia-aarch64.S: Use ELF macro, use x19 instead of x18.
+ * cipher/chacha20-aarch64.S: Use ELF macro, don't use GOT on windows.
+ * cipher/cipher-gcm-armv8-aarch64-ce.S: Use ELF macro.
+ * cipher/rijndael-aarch64.S: Use ELF macro.
+ * cipher/rijndael-armv8-aarch64-ce.S: Use ELF macro.
+ * cipher/sha1-armv8-aarch64-ce.S: Use ELF macro.
+ * cipher/sha256-armv8-aarch64-ce.S: Use ELF macro.
+ * cipher/twofish-aarch64.S: Use ELF macro.
+ * configure.ac: Don't require .size and .type in aarch64 assembly check.
+
+ aarch64: camellia: Only use the lower 32 bit of an int parameter.
+ + commit 4e1b628f492643d4e9b830bcdab7b49daaec5854
+ * cipher/camellia-aarch64.S: Use 'w3' instead of 'x3'.
+
+ aarch64: Fix assembling chacha20-aarch64.S with clang/llvm.
+ + commit 36e916fc332eda74963192b1c0bf6860a3e5d67b
+ * cipher/chacha20-aarch64.S: Remove superfluous lane counts.
+
+ aarch64: mpi: Fix building the mpi aarch64 assembly for windows.
+ + commit ec0a2f25c0f64a7b65b373508ce9081e10461965
+ * mpi/aarch64/mpih-add1.S: Use ELF macro.
+ * mpi/aarch64/mpih-mul1.S: Use ELF macro.
+ * mpi/aarch64/mpih-mul2.S: Use ELF macro.
+ * mpi/aarch64/mpih-mul3.S: Use ELF macro.
+ * mpi/aarch64/mpih-sub1.S: Use ELF macro.
+ * mpi/asm-common-aarch64.h: New.
+
+ random: Don't assume that _WIN64 implies x86_64.
+ + commit ed41d6d6fb4551342b22ef763de1bd60e964e186
+ * random/rndw32.c: Change _WIN64 ifdef into __x86_64__.
+
+2018-03-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests/aeswrap: add in-place encryption/decryption testing.
+ + commit 885f031fbd17abc1c0fedbb98df22823b647fc11
+ * tests/aeswrap.c (check): Rename to...
+ (check_one): ...this and add in-place testing.
+ (check): New.
+
+2018-03-22 Stephan Mueller <smueller@chronox.de>
+
+ AES-KW: fix in-place encryption.
+ + commit 330ec66e0babdabb658dc7d6db78f37b2a1b996e
+ * cipher/cipher-aeswrap.c: move memmove call before KW IV setting
+
+2018-03-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ bench-slope: add CPU frequency auto-detection.
+ + commit 617f5e746f8295cc36d1002c8c53edc95d04d0f6
+ * tests/bench-slope.c (bench_obj): Add 'hd'.
+ (bench_encrypt_init, bench_encrypt_free, bench_encrypt_do_bench)
+ (bench_decrypt_do_bench, bench_xts_encrypt_init)
+ (bench_xts_encrypt_do_bench, bench_xts_decrypt_do_bench)
+ (bench_ccm_encrypt_init, bench_ccm_encrypt_do_bench)
+ (bench_ccm_decrypt_do_bench, bench_aead_encrypt_init)
+ (bench_aead_encrypt_do_bench, bench_aead_decrypt_do_bench)
+ (bench_hash_init, bench_hash_free, bench_hash_do_bench)
+ (bench_mac_init, bench_mac_free, bench_mac_do_bench): Use 'obj->hd'
+ for storing pointer to crypto context.
+ (auto_ghz): New.
+ (do_slope_benchmark): Rename to...
+ (slope_benchmark): ...this.
+ (auto_ghz_init, auto_ghz_free, auto_ghz_bench, auto_ghz_detect_ops)
+ (get_auto_ghz, do_slope_benchmark): New.
+ (double_to_str): Round number larger than 1000 to integer.
+ (bench_print_result_csv, bench_print_result_std)
+ (bench_print_result, bench_print_header, cipher_bench_one)
+ (hash_bench_one, mac_bench_one, kdf_bench_one, kdf_bench): Add
+ auto-detected frequency printing.
+ (print_help): Help for CPU speed auto-detection mode.
+ (main): Add parsing for "--cpu-mhz auto".
+
+ _gcry_burn_stack: use memset for clearing memory.
+ + commit 3841b23c0ccb24d555b7570083bba958e3126d26
+ * src/misc.c (__gcry_burn_stack) [HAVE_VLA]: Use 'memset' for clearing
+ stack.
+
+ Improve constant-time buffer compare.
+ + commit a1127dbbada4302abf09eec90fbaceca87bfcdf0
+ * cipher/bufhelp.h (buf_eq_const): Rewrite logic.
+
+2018-02-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add Intel SHA Extensions accelerated SHA256 implementation.
+ + commit 0b3ec359e2279c3b46b171372b1b7733bba20cd7
+ * cipher/Makefile.am: Add 'sha256-intel-shaext.c'.
+ * cipher/sha256-intel-shaext.c: New.
+ * cipher/sha256.c (USE_SHAEXT)
+ (_gcry_sha256_transform_intel_shaext): New.
+ (SHA256_CONTEXT): Add 'use_shaext'.
+ (sha256_init, sha224_init) [USE_SHAEXT]: Use shaext if supported.
+ (transform) [USE_SHAEXT]: Use shaext if enabled.
+ (transform): Only add ASM_EXTRA_STACK if returned burn length is not
+ zero.
+ * configure.ac: Add 'sha256-intel-shaext.lo'.
+
+ Add Intel SHA Extensions accelerated SHA1 implementation.
+ + commit d02958bd300d2c80bc92b1e072103e95e256b297
+ * cipher/Makefile.am: Add 'sha1-intel-shaext.c'.
+ * cipher/sha1-intel-shaext.c: New.
+ * cipher/sha1.c (USE_SHAEXT, _gcry_sha1_transform_intel_shaext): New.
+ (sha1_init) [USE_SHAEXT]: Use shaext implementation is supported.
+ (transform) [USE_SHAEXT]: Use shaext if enabled.
+ (transform): Only add ASM_EXTRA_STACK if returned burn length is not
+ zero.
+ * cipher/sha1.h (SHA1_CONTEXT): Add 'use_shaext'.
+ * configure.ac: Add 'sha1-intel-shaext.lo'.
+ (shaextsupport, gcry_cv_gcc_inline_asm_shaext): New.
+ * src/g10lib.h: Add HWF_INTEL_SHAEXT and reorder HWF flags.
+ * src/hwf-x86.c (detect_x86_gnuc): Detect SHA Extensions.
+ * src/hwfeatures.c (hwflist): Add 'intel-shaext'.
+
+ AVX implementation of BLAKE2s.
+ + commit da58a62ac1b7a8d97b0895dcb41d15af531e45e5
+ * cipher/Makefile.am: Add 'blake2s-amd64-avx.S'.
+ * cipher/blake2.c (USE_AVX, _gry_blake2s_transform_amd64_avx): New.
+ (BLAKE2S_CONTEXT) [USE_AVX]: Add 'use_avx'.
+ (blake2s_transform): Rename to ...
+ (blake2s_transform_generic): ... this.
+ (blake2s_transform): New.
+ (blake2s_final): Pass 'ctx' pointer to transform function instead of
+ 'S'.
+ (blake2s_init_ctx): Check HW features and enable AVX implementation
+ if supported.
+ * cipher/blake2s-amd64-avx.S: New.
+ * configure.ac: Add 'blake2s-amd64-avx.lo'.
+
+2018-02-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ AVX2 implementation of BLAKE2b.
+ + commit af7fc732f9a7af7a70276f1e8364d2132db314f1
+ * cipher/Makefile.am: Add 'blake2b-amd64-avx2.S'.
+ * cipher/blake2.c (USE_AVX2, ASM_FUNC_ABI, ASM_EXTRA_STACK)
+ (_gry_blake2b_transform_amd64_avx2): New.
+ (BLAKE2B_CONTEXT) [USE_AVX2]: Add 'use_avx2'.
+ (blake2b_transform): Rename to ...
+ (blake2b_transform_generic): ... this.
+ (blake2b_transform): New.
+ (blake2b_final): Pass 'ctx' pointer to transform function instead of
+ 'S'.
+ (blake2b_init_ctx): Check HW features and enable AVX2 implementation
+ if supported.
+ * cipher/blake2b-amd64-avx2.S: New.
+ * configure.ac: Add 'blake2b-amd64-avx2.lo'.
+
+2018-01-31 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix incorrect counter overflow handling for GCM.
+ + commit ffdc6f3623a0bcb41324d562340b2cd1c288e387
+ * cipher/cipher-gcm.c (gcm_ctr_encrypt): New function to handle
+ 32-bit CTR increment for GCM.
+ (_gcry_cipher_gcm_encrypt, _gcry_cipher_gcm_decrypt): Do not use
+ generic CTR implementation directly, use gcm_ctr_encrypt instead.
+ * tests/basic.c (_check_gcm_cipher): Add test-vectors for 32-bit
+ CTR overflow.
+ (check_gcm_cipher): Add 'split input to 15 bytes and 17 bytes'
+ test-runs.
+
+2018-01-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix use of AVX instructions in Chaha20 SSSE3 implementation.
+ + commit 0b55f349a8b8f4b0ac9ed724c2d5b8dcc9f5401c
+ * cipher/chacha20-amd64-ssse3.S: Replace two 'vmovdqa' instructions
+ with 'movdqa'.
+
+2018-01-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ doc: fix double "See" in front of reference.
+ + commit bd75f0e89817b5708c57efab49e3eb4e035186e2
+ * doc/gcrypt.texi: Change @xref to @ref when text already has 'see' in
+ the front.
+
+ Add EAX mode.
+ + commit e8629e535bd0e9711b07904d4501de8ad57aaecd
+ * cipher/Makefile.am: Add 'cipher-eax.c'.
+ * cipher/cipher-cmac.c (cmac_write): Rename to ...
+ (_gcry_cmac_write): ... this; Take CMAC context as new input
+ parameter; Return error code.
+ (cmac_generate_subkeys): Rename to ...
+ (_gcry_cmac_generate_subkeys): ... this; Take CMAC context as new
+ input parameter; Return error code.
+ (cmac_final): Rename to ...
+ (_gcry_cmac_final): ... this; Take CMAC context as new input
+ parameter; Return error code.
+ (cmac_tag): Take CMAC context as new input parameter.
+ (_gcry_cmac_reset): New.
+ (_gcry_cipher_cmac_authenticate): Remove duplicate tag flag check;
+ Adapt to changes above.
+ (_gcry_cipher_cmac_get_tag): Adapt to changes above.
+ (_gcry_cipher_cmac_check_tag): Ditto.
+ (_gcry_cipher_cmac_set_subkeys): Ditto.
+ * cipher-eax.c: New.
+ * cipher-internal.h (gcry_cmac_context_t): New.
+ (gcry_cipher_handle): Update u_mode.cmac; Add u_mode.eax.
+ (_gcry_cmac_write, _gcry_cmac_generate_subkeys, _gcry_cmac_final)
+ (_gcry_cmac_reset, _gcry_cipher_eax_encrypt, _gcry_cipher_eax_decrypt)
+ (_gcry_cipher_eax_set_nonce, _gcry_cipher_eax_authenticate)
+ (_gcry_cipher_eax_get_tag, _gcry_cipher_eax_check_tag)
+ (_gcry_cipher_eax_setkey): New prototypes.
+ * cipher/cipher.c (_gcry_cipher_open_internal, cipher_setkey)
+ (cipher_reset, cipher_encrypt, cipher_decrypt, _gcry_cipher_setiv)
+ (_gcry_cipher_authenticate, _gcry_cipher_gettag, _gcry_cipher_checktag)
+ (_gcry_cipher_info): Add EAX mode.
+ * doc/gcrypt.texi: Add EAX mode.
+ * src/gcrypt.h.in (GCRY_CIPHER_MODE_EAX): New.
+ * tests/basic.c (_check_gcm_cipher, _check_poly1305_cipher): Constify
+ test vectors array.
+ (_check_eax_cipher, check_eax_cipher): New.
+ (check_ciphers, check_cipher_modes): Add EAX mode.
+ * tests/bench-slope.c (bench_eax_encrypt_do_bench)
+ (bench_eax_decrypt_do_bench, bench_eax_authenticate_do_bench)
+ (eax_encrypt_ops, eax_decrypt_ops, eax_authenticate_ops): New.
+ (cipher_modes): Add EAX mode.
+ * tests/benchmark.c (cipher_bench): Add EAX mode.
+
+ cipher: constify spec arrays.
+ + commit cd7ed2e3546b12dd98df4211949f1cdbf5827013
+ * cipher/cipher.c (cipher_list): Constify array.
+ * cipher/mac.c (mac_list): Constify array.
+ * cipher/md.c (digest_list): Constify array.
+ * cipher/pubkey.c (pubkey_list): Constify array.
+
+ Add ARMv8/CE acceleration for AES-XTS.
+ + commit 93503c127a52c1f6a193750e2bf181a744ba3e6b
+ * cipher/rijndael-armv8-aarch32-ce.S (_gcry_aes_xts_enc_armv8_ce)
+ (_gcry_aes_xts_dec_armv8_ce): New.
+ * cipher/rijndael-armv8-aarch64-ce.S (_gcry_aes_xts_enc_armv8_ce)
+ (_gcry_aes_xts_dec_armv8_ce): New.
+ * cipher/rijndael-armv8-ce.c (_gcry_aes_xts_enc_armv8_ce)
+ (_gcry_aes_xts_dec_armv8_ce, xts_crypt_fn_t)
+ (_gcry_aes_armv8_ce_xts_crypt): New.
+ * cipher/rijndael.c (_gcry_aes_armv8_ce_xts_crypt): New.
+ (_gcry_aes_xts_crypt) [USE_ARM_CE]: New.
+
+2018-01-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-ssse3: call assembly functions directly.
+ + commit c3d60acc3ab5c6d60c2258882175bf31351cc998
+ * cipher/rijndael-ssse3-amd64-asm.S (_gcry_aes_ssse3_enc_preload)
+ (_gcry_aes_ssse3_dec_preload, _gcry_aes_ssse3_encrypt_core)
+ (_gcry_aes_ssse3_decrypt_core, _gcry_aes_schedule_core): Add
+ ENTER_SYSV_FUNC_PARAMS_* at function entry and EXIT_SYSV_FUNC at exit.
+ (_gcry_aes_ssse3_encrypt_core, _gcry_aes_ssse3_decrypt_core): Change
+ to input parameters to RDI and RSI registers.
+ * cipher/rijndael-ssse3-amd64.c (_gcry_aes_ssse3_encrypt_core)
+ (_gcry_aes_ssse3_decrypt_core, _gcry_aes_schedule_core): Add parameters
+ for function prototypes.
+ (PUSH_STACK_PTR, POP_STACK_PTR): Remove.
+ (vpaes_ssse3_prepare_enc, vpaes_ssse3_prepare_dec)
+ (_gcry_aes_ssse3_do_setkey, _gcry_aes_ssse3_prepare_decryption)
+ (do_vpaes_ssse3_enc, do_vpaes_ssse3_dec): Remove inline assembly to
+ call functions, and call directly instead.
+
+ Move AMD64 MS to SysV calling convention conversion to assembly side.
+ + commit a518b6680ea80a4325731028545a701c1d71fc02
+ * cipher/Makefile.am: Add 'asm-common-amd64.h'.
+ * cipher/asm-common-amd64.h: New.
+ * cipher/blowfish-amd64.S: Add ENTER_SYSV_FUNC_* and EXIT_SYSV_FUNC for
+ each global function from 'asm-common-amd64.h'.
+ * cipher/cast5-amd64.S: Ditto.
+ * cipher/des-amd64.S: Ditto.
+ * cipher/rijndael-amd64.S: Ditto.
+ * cipher/twofish-amd64.S: Ditto.
+ * cipher/arcfour-amd64.S: Ditto.
+ * cipher/blowfish.c [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]
+ (call_sysv_fn): Remove.
+ * cipher/cast5.c [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]
+ (call_sysv_fn): Remove.
+ * cipher/twofish.c [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]
+ (call_sysv_fn, call_sysv_fn5, call_sysv_fn6): Remove.
+ * cipher/rijndael.c (do_encrypt, do_decrypt)
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]: Remove assembly block for
+ calling SysV ABI function.
+ * cipher/arcfour.c [USE_AMD64_ASM] (encrypt_stream): Ditto.
+
+ Make BMI2 inline assembly check more robust.
+ + commit 135250e3060e79be698d4f36a819aa8a880789f8
+ * configure.ac (gcry_cv_gcc_inline_asm_bmi2): New assembly test.
+
+ Add AES-NI acceleration for AES-XTS.
+ + commit a00c5b2988cea256c7823a76ce601febf02c790f
+ * cipher/cipher-internal.h (gcry_cipher_handle): Change bulk
+ XTS function to take cipher context.
+ * cipher/cipher-xts.c (_gcry_cipher_xts_crypt): Ditto.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Setup AES-NI
+ XTS bulk function.
+ * cipher/rijndael-aesni.c (xts_gfmul_const, _gcry_aes_aesni_xts_enc)
+ (_gcry_aes_aesni_xts_enc, _gcry_aes_aesni_xts_crypt): New.
+ * cipher/rijndael.c (_gcry_aes_aesni_xts_crypt)
+ (_gcry_aes_xts_crypt): New.
+ * src/cipher.h (_gcry_aes_xts_crypt): New.
+
+ AES-NI improvements for AMD64.
+ + commit c9e9cb2eb6a1c659d3825ca627228b732f2f2152
+ * cipher/rijndael-aesni.c [__x86_64__] (aesni_prepare_7_15_variable)
+ (aesni_prepare_7_15, aesni_cleanup_7_15, do_aesni_enc_vec8)
+ (do_aesni_dec_vec8, do_aesni_ctr_8): New.
+ (_gcry_aes_aesni_ctr_enc, _gcry_aes_aesni_cfb_dec)
+ (_gcry_aes_aesni_cbc_dec, aesni_ocb_enc, aesni_ocb_dec)
+ (_gcry_aes_aesni_ocb_auth) [__x86_64__]: Add 8 parallel blocks
+ processing.
+
+ Add ARMv8/AArch64 implementation of chacha20.
+ + commit b3ec0f752c925cde36f560f0f9309ab6450bbfd9
+ * cipher/Makefile.am: Add 'chacha20-aarch64.S'.
+ * cipher/chacha20-aarch64.S: New.
+ * cipher/chacha20.c (USE_AARCH64_SIMD): New.
+ (_gcry_chacha20_aarch_blocks4): New.
+ (chacha20_do_setkey): Add HWF selection for Aarch64 implementation.
+ * configure.ac: Add 'chacha20-aarch64.lo'.
+
+ New ChaCha implementations.
+ + commit 172ad09cbedc893f147180875335f4c525393c0b
+ * cipher/Makefile.am: Remove 'chacha20-sse2-amd64.S',
+ 'chacha20-ssse3-amd64.S', 'chacha20-avx2-amd64.S'; Add
+ 'chacha20-amd64-ssse3.S', 'chacha20-amd64-avx2.S'.
+ * cipher/chacha20-amd64-avx2.S: New.
+ * cipher/chacha20-amd64-ssse3.S: New.
+ * cipher/chacha20-armv7-neon.S: Rewrite.
+ * cipher/chacha20-avx2-amd64.S: Remove.
+ * cipher/chacha20-sse2-amd64.S: Remove.
+ * cipher/chacha20-ssse3-amd64.S: Remove.
+ * cipher/chacha20.c (CHACHA20_INPUT_LENGTH, USE_SSE2, USE_NEON)
+ (ASM_EXTRA_STACK, chacha20_blocks_t, _gcry_chacha20_amd64_sse2_blocks)
+ (_gcry_chacha20_amd64_ssse3_blocks, _gcry_chacha20_amd64_avx2_blocks)
+ (_gcry_chacha20_armv7_neon_blocks, QROUND, QOUT, chacha20_core)
+ (chacha20_do_encrypt_stream): Remove.
+ (_gcry_chacha20_amd64_ssse3_blocks4, _gcry_chacha20_amd64_avx2_blocks8)
+ (_gcry_chacha20_armv7_neon_blocks4, ROTATE, XOR, PLUS, PLUSONE)
+ (QUARTERROUND, BUF_XOR_LE32): New.
+ (CHACHA20_context_s, chacha20_blocks, chacha20_keysetup)
+ (chacha20_encrypt_stream): Rewrite.
+ (chacha20_do_setkey): Adjust for new CHACHA20_context_s.
+ * configure.ac: Remove 'chacha20-sse2-amd64.lo',
+ 'chacha20-ssse3-amd64.lo', 'chacha20-avx2-amd64.lo'; Add
+ 'chacha20-amd64-ssse3.lo', 'chacha20-amd64-avx2.lo'.
+
+ New Poly1305 implementations.
+ + commit b9a471ccf5f02f89e25c7ccc29898d0e4e486099
+ * cipher/Makefile.am: Include '../mpi' for 'longlong.h'; Remove
+ 'poly1305-sse2-amd64.S', 'poly1305-avx2-amd64.S' and
+ 'poly1305-armv7-neon.S'.
+ * cipher/poly1305-armv7-neon.S: Remove.
+ * cipher/poly1305-avx2-amd64.S: Remove.
+ * cipher/poly1305-sse2-amd64.S: Remove.
+ * cipher/poly1305-internal.h (POLY1305_BLOCKSIZE)
+ (POLY1305_STATE): New.
+ (POLY1305_SYSV_FUNC_ABI, POLY1305_REF_BLOCKSIZE)
+ (POLY1305_REF_STATESIZE, POLY1305_REF_ALIGNMENT)
+ (POLY1305_USE_SSE2, POLY1305_SSE2_BLOCKSIZE, POLY1305_SSE2_STATESIZE)
+ (POLY1305_SSE2_ALIGNMENT, POLY1305_USE_AVX2, POLY1305_AVX2_BLOCKSIZE)
+ (POLY1305_AVX2_STATESIZE, POLY1305_AVX2_ALIGNMENT)
+ (POLY1305_USE_NEON, POLY1305_NEON_BLOCKSIZE, POLY1305_NEON_STATESIZE)
+ (POLY1305_NEON_ALIGNMENT, POLY1305_LARGEST_BLOCKSIZE)
+ (POLY1305_LARGEST_STATESIZE, POLY1305_LARGEST_ALIGNMENT)
+ (POLY1305_STATE_BLOCKSIZE, POLY1305_STATE_STATESIZE)
+ (POLY1305_STATE_ALIGNMENT, OPS_FUNC_ABI, poly1305_key_s)
+ (poly1305_ops_s): Remove.
+ (poly1305_context_s): Rewrite.
+ * cipher/poly1305.c (_gcry_poly1305_amd64_sse2_init_ext)
+ (_gcry_poly1305_amd64_sse2_finish_ext)
+ (_gcry_poly1305_amd64_sse2_blocks, poly1305_amd64_sse2_ops)
+ (poly1305_init_ext_ref32, poly1305_blocks_ref32)
+ (poly1305_finish_ext_ref32, poly1305_default_ops)
+ (_gcry_poly1305_amd64_avx2_init_ext)
+ (_gcry_poly1305_amd64_avx2_finish_ext)
+ (_gcry_poly1305_amd64_avx2_blocks)
+ (poly1305_amd64_avx2_ops, poly1305_get_state): Remove.
+ (poly1305_init): Rewrite.
+ (USE_MPI_64BIT, USE_MPI_32BIT): New.
+ [USE_MPI_64BIT] (ADD_1305_64, MUL_MOD_1305_64, poly1305_blocks)
+ (poly1305_final): New implementation using 64-bit limbs.
+ [USE_MPI_32BIT] (UMUL_ADD_32, ADD_1305_32, MUL_MOD_1305_32)
+ (poly1305_blocks): New implementation using 32-bit limbs.
+ (_gcry_poly1305_update, _gcry_poly1305_finish)
+ (_gcry_poly1305_init): Adapt to new implementation.
+ * configure.ac: Remove 'poly1305-sse2-amd64.lo',
+ 'poly1305-avx2-amd64.lo' and 'poly1305-armv7-neon.lo'.
+
+ mpi/ec: fix when 'unsigned long' is 32-bit but limb size is 64-bit.
+ + commit d39deb0a41dbeec81174704904d3d29c66d10d7e
+ * mpi/ec.c (ec_addm_25519, ec_subm_25519, ec_mulm_25519): Cast '1' to
+ mpi_limb_t before left shift.
+
+2017-11-24 Werner Koch <wk@gnupg.org>
+
+ sexp: Avoid a fatal error in case of ENOMEM in called functions.
+ + commit 2ad912d5b7794fb32192fddab1b559c7b86303a2
+ * src/sexp.c (do_vsexp_sscan): Replace BUG() by a proper error
+ return. Replace sprintf by snprintf.
+ (convert_to_hex): Replace sprintf by snprintf.
+ (convert_to_string): Ditto.
+ (_gcry_sexp_sprint): Ditto.
+
+ api: Add GCRYCTL_AUTO_EXPAND_SECMEM.
+ + commit 1f6b2f6099ebcfd785e2d2ae0aeca810394dbbac
+ * src/gcrypt.h.in (GCRYCTL_AUTO_EXPAND_SECMEM): New enum.
+ * src/global.c (_gcry_vcontrol): Implement that.
+ * src/secmem.c (auto_expand): New var.
+ (_gcry_secmem_set_auto_expand): New.
+ (_gcry_secmem_malloc_internal): Act upon AUTO_EXPAND.
+
+2017-11-14 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Add HAVE_MMAP check for MinGW.
+ + commit c594f187bd457b757112adc551ffa4db92962dc1
+ * tests/t-secmem.c (main): Conditionalize with HAVE_MMAP.
+
+2017-11-09 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix secmem test for machine with larger page.
+ + commit 621f5c4e837347308a6b06a8cfbfc47ca9fae69e
+ * tests/t-secmem.c (main): Detect page size and setup chunk size.
+ * src/secmem.c (init_pool): Simplify the expression.
+
+2017-10-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ Add OID information for SM3.
+ + commit 94b84360ca55c407222a3eb8222d8b1816fc617f
+ * cipher/sm3.c (asn_sm3, oid_spec_sm3): New.
+ (_gcry_digest_spec_sm3): Add asn_sm3, oid_spec_sm3.
+
+2017-10-24 Jia Zhang <qianyue.zj@alibaba-inc.com>
+
+ Add crypto hash SM3.
+ + commit 4423bf3cc4432b9bfe801ff74cb05e6f0dd3eccd
+ * configure.ac (available_digests): Add sm3.
+ * src/cipher.h: Add declarations for SM3.
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add sm3.c.
+ * cipher/md.c [USE_SM3] (digest_list): Add _gcry_digest_spec_sm3.
+ * cipher/pubkey-util.c (hashnames): Add "sm3".
+ * cipher/sm3.c: New.
+ * tests/basic.c (check_digests): Add test vectors for SM3.
+ * tests/hashtest-256g.in (algos): Add SM3.
+ * tests/hashtest.c (testvectors): Add for SM3.
+
+2017-10-24 NIIBE Yutaka <gniibe@fsij.org>
+
+ Add new constant GCRY_MD_SM3 for crypto hash SM3.
+ + commit 5b31e22d9fc542bdccb1586ef2c83d9794a731d3
+ * src/gcrypt.h.in (GCRY_MD_SM3): New.
+
+2017-10-17 Werner Koch <wk@gnupg.org>
+
+ api: New function gcry_mpi_get_ui.
+ + commit c6e42e7ec3d1046969d783c443c13aad7cb61bb8
+ * src/gcrypt.h.in (gcry_mpi_get_ui): New.
+ (mpi_get_ui): New macro.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add new function.
+ * src/visibility.c (gcry_mpi_get_ui): New.
+ * src/visibility.h: Mark that function.
+ (gcry_mpi_get_ui): New.
+ * mpi/mpiutil.c (MY_UINT_MAX): New macro.
+ (_gcry_mpi_get_ui): Re-implemented. This function existed but was
+ never imported or used.
+ * tests/mpitests.c (test_maxsize): Add some test for this function.
+
+2017-08-29 NIIBE Yutaka <gniibe@fsij.org>
+
+ Tweak GCC version check.
+ + commit e4dc458b0b7dc9b8417a2177ef17822d9b9064ec
+ * src/global.c (_gcry_vcontrol): It's GCC 4.2 which started to support
+ diagnostic pragma.
+
+ random: Fix warnings on Windows.
+ + commit 8126a6717c80d4fc1766d7f975e872bee2f9f203
+ * random/random-csprng.c (lock_seed_file): Vars with no use.
+
+ tests: Fix warnings on Windows.
+ + commit a848ef44470a524c05624afb54b92cf25595acd2
+ * tests/fipsdrv.c (print_dsa_domain_parameters, print_ecdsa_dq): Fix.
+
+ ecc: Fix scratch MPI.
+ + commit db3a8d6890fb4a6436e082b49378c0bd891563ca
+ * mpi/ec.c (ec_p_init): Check if scratch MPI is allocated.
+
+ ecc: Fix ec_mulm_25519.
+ + commit 1d5f726668b9cc32d6bb601f2329987058146c6c
+ * mpi/ec.c (ec_mulm_25519): Improve reduction to 25519.
+
+ ecc: Use 25519 method also for ed25519.
+ + commit fab712d654b2ccd24696ed90bc239860a128ad5b
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Don't use mpi_add
+ since it resizes to have more limbs.
+ * mpi/ec.c (point_resize): Fix for Edwards curve.
+ (ec_p_init): Support Edwards curve.
+ (_gcry_mpi_ec_get_affine): Use the methods.
+ (dup_point_edwards, add_points_edwards, sub_points_edwards): Ditto.
+ (_gcry_mpi_ec_mul_point): Resize MPIs of point to fixed size.
+ (_gcry_mpi_ec_curve_point): Use the methods.
+
+ ecc: Clean up curve specific method support.
+ + commit 1ac3d3637dd80013b78e03b9b9f582091710d908
+ * src/ec-context.h (struct mpi_ec_ctx_s): Remove MOD method.
+ * mpi/ec.c (ec_mod_25519): Remove.
+ (ec_p_init): Follow the removal of the MOD method.
+
+ ecc: Relax condition for 25519 computations.
+ + commit e9be23c4ad9f42c9d3198c706f912b7e27f574bc
+ * mpi/ec.c (ec_addm_25519, ec_subm_25519, ec_mulm_25519): Check number
+ of limbs, allocated more is OK.
+
+ ecc: Fix ec_mulm_25519.
+ + commit 449459a2770d3aecb1f36502bf1903e0cbd2873e
+ * mpi/ec.c (ec_mulm_25519): Fix the cases of 0 to 18.
+
+ ecc: field specific routines for 25519.
+ + commit 9ed0fb37bd637d1a2e9498c24097cfeadec682ec
+ * mpi/ec.c (point_resize): Improve for X25519.
+ (mpih_set_cond): New.
+ (ec_mod_25519, ec_addm_25519, ec_subm_25519, ec_mulm_25519)
+ (ec_mul2_25519, ec_pow2_25519): New.
+ (ec_p_init): Fill by FIELD_TABLE.
+
+ ecc: Add field specific computation methods.
+ + commit d4cd381defe5b37dda19bbda0986bdd38065bd31
+ * src/ec-context.h (struct mpi_ec_ctx_s): Add methods.
+ * mpi/ec.c (ec_p_init): Initialize the default methods.
+ (montgomery_ladder): Use the methods.
+
+2017-08-27 Werner Koch <wk@gnupg.org>
+
+ Release 1.8.1.
+ + commit 80fd8615048c3897b91a315cca22ab139b056ccd
+ * configure.ac: Set LT version to C22/A2/R1.
+
+2017-08-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Add input validation for X25519.
+ + commit bf76acbf0da6b0f245e491bec12c0f0a1b5be7c9
+ * cipher/ecc.c (ecc_decrypt_raw): Add input validation.
+ * mpi/ec.c (ec_p_init): Use scratch buffer for bad points.
+ (_gcry_mpi_ec_bad_point): New.
+
+2017-08-07 Marcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
+
+ cipher: Add OID for SHA384WithECDSA.
+ + commit a7bd2cbd3eabda88fb3cac5cbc13c21c97a7b315
+ * cipher/sha512.c (oid_spec_sha384): Add SHA384WithECDSA.
+
+2017-08-02 Werner Koch <wk@gnupg.org>
+
+ tests: Fix a printf glitch for a Windows test.
+ + commit df1e221b3012e96bbffbc7d5fd70836a9ae1cc19
+ * tests/t-convert.c (check_formats): Fix print format glitch on
+ Windows.
+ * tests/t-ed25519.c: Typo fix.
+
+ tests: Add benchmarking option to tests/random.
+ + commit 21d0f068a721c022f955084c28304934fd198c5e
+ * tests/random.c: Always include unistd.h.
+ (prepend_srcdir): New.
+ (run_benchmark): New.
+ (main): Add options --benchmark and --with-seed-file. Print whetehr
+ JENT has been used.
+ * tests/t-common.h (split_fields_colon): New. Taken from GnuPG.
+ License of that code changed to LGPLv2.1.
+
+ random: Add more bytes to the pool in addition to the seed file.
+ + commit eea36574f37830a6a80b4fad884825e815b2912f
+ * random/random-csprng.c (read_seed_file): Read 128 or 32 butes
+ depending on whether we have the Jitter RNG.
+
+2017-08-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add script to run basic tests with all supported HWF combinations.
+ + commit 94a92a3db909aef0ebcc009c2d7f5a2663e99004
+ * tests/basic_all_hwfeature_combinations.sh: New.
+ * tests/Makefile.am: Add basic_all_hwfeature_combinations.sh.
+
+2017-07-29 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix return value type for _gcry_md_extract.
+ + commit cf1528e7f2761774d06ace0de48f39c96b52dc4f
+ * src/gcrypt-int.h (_gcry_md_extract): Use gpg_err_code_t instead of
+ gpg_error_t for internal function return type.
+
+ Fix building AArch32 CE implementations when target is ARMv6 arch.
+ + commit 4a7aa30ae9f3ce798dd886c2f2d4164c43027748
+ * cipher/cipher-gcm-armv8-aarch32-ce.S: Select ARMv8 architecure.
+ * cipher/rijndael-armv8-aarch32-ce.S: Ditto.
+ * cipher/sha1-armv8-aarch32-ce.S: Ditto.
+ * cipher/sha256-armv8-aarch32-ce.S: Ditto.
+ * configure.ac (gcry_cv_gcc_inline_asm_aarch32_crypto): Ditto.
+
+2017-07-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ sexp: Add fall through annotation.
+ + commit b7cd44335d9cde43be6f693dca6399ed0762649c
+ * src/dumpsexp.c (parse_and_print): It's fall through.
+
+2017-07-24 Werner Koch <wk@gnupg.org>
+
+ random: Fix the command line munging for jitterbase.
+ + commit ac39522ab08fcd2483edc223334c6ab9d19e91f3
+ * random/Makefile.am (o_flag_munging): Make the first sed term also
+ global.
+
+2017-07-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ Remove byte order mark.
+ + commit 1d8e4c2c3a7d0a4154caf5bd720a9a0b04179390
+ * random/jitterentropy-base.c, random/jitterentropy.h: Remove
+ byte order mark.
+
+2017-07-18 Werner Koch <wk@gnupg.org>
+
+ Release 1.8.0.
+ + commit 850aca744eeda5fd410f478a0778e353045ac962
+
+
+ mac: Add selftests for HMAC-SHA3-xxx.
+ + commit 95194c550443e8d5558856633f920daec8a975c4
+ * cipher/hmac-tests.c (check_one): Add arg trunc and change all
+ callers to pass false.
+ (selftests_sha3): New.
+ (run_selftests): Call new selftests.
+
+ api: New function gcry_mpi_point_copy.
+ + commit ecf73dafb7aafed0d0f339d07235b58c2113f94c
+ * src/gcrypt.h.in (gcry_mpi_point_copy): New.
+ (mpi_point_copy): New macro.
+ * src/visibility.c (gcry_mpi_point_copy): New.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add function.
+ * mpi/ec.c (_gcry_mpi_point_copy): New.
+ * tests/t-mpi-point.c (set_get_point): Add test.
+
+2017-07-17 Werner Koch <wk@gnupg.org>
+
+ random: Minor fix for getting the rndjent version.
+ + commit 9d99c6b973caa7fdf93b53cf764066214f763803
+ * random/rndjent.c (_gcry_rndjent_get_version): Always set R_ACTIVE.
+ * tests/version.c (test_get_config): Check number of fields for
+ rng-type.
+
+2017-07-07 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Minor fix of mpi_pow.
+ + commit 61b0f52c1cc85bf8c3cac9aba40e28682e4e1b8b
+ * mpi/mpi-pow.c (_gcry_mpi_powm): Allocate size fix.
+
+ mpi: Fix mpi_pow alternative implementation.
+ + commit 66ed4d53789892def7b237756d8a0ab28df9d222
+ * mpi/mpi-pow.c
+ [USE_ALGORITHM_SIMPLE_EXPONENTIATION] (_gcry_mpi_powm): Use
+ mpi_set_cond.
+
+ Fix mpi_pow alternative implementation.
+ + commit 619ebae9847831f43314a95cc3180f4b329b4d3b
+ * mpi/mpi-pow.c [USE_ALGORITHM_SIMPLE_EXPONENTIATION] (_gcry_mpi_powm):
+ Allocate size fix.
+
+2017-07-06 Werner Koch <wk@gnupg.org>
+
+ rsa: Use modern MPI allocation function.
+ + commit 208aba6f9a0475ba049f5a66fe02cf9a6214a887
+ * cipher/rsa.c (secret_core_crt): Use modern function _gcry_mpi_snew.
+
+2017-07-05 Werner Koch <wk@gnupg.org>
+
+ build: Minor API fixes to fix build problems on AIX.
+ + commit 85a9a913da9ecc6b2cd6f743e90e49983251d706
+ * src/gcrypt.h.in (gcry_error_from_errno): Fix return type.
+ * src/visibility.c (gcry_md_extract): Change return type to match the
+ prototype.
+
+ tools: Add left shift to mpicalc.
+ + commit 0d30a4a9791d20c8881b5b12bd44611d9f4274cd
+ * src/mpicalc.c (do_lshift): New.
+ (main): Handle '<'.
+
+2017-07-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Fix mpi_set_secure.
+ + commit 5feaf1cc8f22c1f8d19a34850d86fe190f1432e2
+ * mpi/mpiutil.c (mpi_set_secure): Allocate by ->alloced.
+
+2017-06-29 NIIBE Yutaka <gniibe@fsij.org>
+ Werner Koch <wk@gnupg.org>
+
+ rsa: Add exponent blinding.
+ + commit 8725c99ffa41778f382ca97233183bcd687bb0ce
+ * cipher/rsa.c (secret_core_crt): Blind secret D with randomized
+ nonce R for mpi_powm computation.
+
+2017-06-28 NIIBE Yutaka <gniibe@fsij.org>
+
+ Same computation for square and multiply.
+ + commit 78130828e9a140a9de4dafadbc844dbb64cb709a
+ * mpi/mpi-pow.c (_gcry_mpi_powm): Compare msize for max_u_size. Move
+ the assignment to base_u into the loop. Copy content refered by RP to
+ BASE_U except the last of the loop.
+
+2017-06-24 Werner Koch <wk@gnupg.org>
+
+ rsa: Minor refactoring.
+ + commit e6a3dc9900433bbc8ad362a595a3837318c28fa9
+ * cipher/rsa.c (secret): Factor code out to ...
+ (secret_core_std, secret_core_crt): new functions.
+
+2017-06-23 Werner Koch <wk@gnupg.org>
+
+ random: Add missing dependency.
+ + commit d091610377b2c92cf385282b1adfc30fa6cd5c75
+ * random/Makefile.am (EXTRA_librandom_la_SOURCES): Fix file name.
+ (rndjent.o, rndjent.lo): Depend on jitterentropy-base-user.h.
+
+ random: Update jitterentropy to 2.1.0.
+ + commit 8dfae89ecd3e9ae0967586cb38d12ef9111fc7cd
+ * random/rndjent.c (jent_get_nstime, jent_zfree)
+ (jent_fips_enabled, jent_zalloc): Move functions and macros to ...
+ * random/jitterentropy-base-user.h: this file. That files was not
+ used before.
+ * random/Makefile.am (EXTRA_librandom_la_SOURCES): Add
+ jitterentropy-base-user.
+ * random/jitterentropy-base.c: Update to version 2.1.0.
+ * random/jitterentropy.h: Ditto.
+
+2017-06-21 Werner Koch <wk@gnupg.org>
+
+ api: New function gcry_get_config.
+ + commit 27148e60ba15b0cb73b47a75c688fcb48a1a3444
+ * src/misc.c (_gcry_log_info_with_dummy_fp): Remove.
+ * src/global.c (print_config): New arg WHAT. Remove arg FNC and use
+ gpgrt_fprintf directly.
+ (_gcry_get_config): New.
+ (_gcry_vcontrol) <GCRYCTL_PRINT_CONFIG>: Use _gcry_get_config instead
+ of print_config.
+ * src/gcrypt.h.in (gcry_get_config): New.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add new function.
+ * src/visibility.c (gcry_get_config): New.
+ * src/visibility.h: Mark new function.
+
+ * tests/version.c (test_get_config): New.
+ (main): Call new test.
+
+ random: Allow building rndjent on non-x86.
+ + commit c2319464b03e61aaf34ef6d5f4b59b0c0483a373
+ * random/jitterentropy-base.c (jent_version): Uncomment function.
+ * random/rndjent.c: Include time.h
+ (JENT_USES_RDTSC): New.
+ (JENT_USES_GETTIME): New.
+ (JENT_USES_READ_REAL_TIME): New.
+ (jent_get_nstime): Support clock_gettime and AIX specific
+ function. Taken from Stephan Müller's code.
+ (is_rng_available): New.
+ (_gcry_rndjent_dump_stats): Use that function.
+ (_gcry_rndjent_poll): Use that fucntion. Allow an ADD of NULL for an
+ intialize only mode.
+ (_gcry_rndjent_get_version): New.
+
+2017-06-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-padlock: change asm operands from read-only to read/write.
+ + commit 32b4ab209067f6f08b87b27bc78ec27dc497b708
+ * cipher/rijndael-padlock.c (do_padlock): Change ESI/EDI/ECX to use
+ read/write operands as XCRYPT instruction modifies these registers.
+
+2017-06-16 Werner Koch <wk@gnupg.org>
+
+ random: Make rndjent.c NTG.1 compliant.
+ + commit 82bc052eda5b3897724c7ad11e54f8203e8e88e9
+ * random/rndjent.c (_gcry_rndjent_poll): Hash the retrieved jitter.
+
+ md: Optimize gcry_md_hash_buffers for SHA-256 and SHA-512.
+ + commit e6f90a392a1fd59b19b16f7a2bc7c439ae369d5f
+ * cipher/sha256.c (_gcry_sha256_hash_buffer): New.
+ (_gcry_sha256_hash_buffers): New.
+ * cipher/sha512.c (_gcry_sha512_hash_buffer): New.
+ (_gcry_sha512_hash_buffers): New.
+ * cipher/md.c (_gcry_md_hash_buffer): Optimize for SHA246 and SHA512.
+ (_gcry_md_hash_buffers): Ditto.
+
+ random: Allow building rndjent.c with stats collecting enabled.
+ + commit ee3a74f5539cbc5182ce089994e37c16ce612149
+ * random/rndjent.c: Change license to the one used by jitterentropy.h.
+ (jent_init_statistic): New.
+ (jent_bit_count): New.
+ (jent_statistic_copy_stat): new.
+ (jent_calc_statistic): New.
+
+ New global config option "only-urandom".
+ + commit 8f6082e95f30c1ba68d2de23da90146f87f0c66c
+ * random/rand-internal.h (RANDOM_CONF_ONLY_URANDOM): New.
+ * random/random.c (_gcry_random_read_conf): Add option "only-urandom".
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Implement that
+ option.
+ * tests/keygen.c (main): Add option --no-quick for better manual
+ tests.
+
+ Implement global config file /etc/gcrypt/random.conf.
+ + commit b05a4abc358b204dba343d9cfbd59fdc828c1686
+ * src/hwfeatures.c (my_isascii): Move macro to ...
+ * src/g10lib.h: here.
+ * tests/random.c (main): Dump random stats.
+ * random/random.c (RANDOM_CONF_FILE): New.
+ (_gcry_random_read_conf): New.
+ (_gcry_random_dump_stats): Call rndjent stats.
+ * random/rndjent.c (jent_rng_totalcalls, jent_rng_totalbytes): New.
+ (_gcry_rndjent_poll): Take care of config option disable-jent. Wipe
+ buffer. Bump counters.
+ (_gcry_rndjent_dump_stats): New.
+
+2017-06-14 Werner Koch <wk@gnupg.org>
+
+ random: Add jitter RND based entropy collector.
+ + commit f5e7763ddca59dcd9ac9f2f4d50cb41b14a34a9e
+ * random/rndjent.c: New.
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Use rndjent.
+ * random/rndw32.c (_gcry_rndw32_gather_random): Use rndjent.
+ (slow_gatherer): Fix compiler warning.
+ * random/Makefile.am (librandom_la_SOURCES): Add rndjent.c
+ (EXTRA_librandom_la_SOURCES): Add jitterentropy-base.c and
+ jitterentropy.h.
+ (rndjent.o, rndjent.lo): New rules.
+ * configure.ac: New option --disbale-jent-support
+ (ENABLE_JENT_SUPPORT): New ac-define.
+
+ cipher: New helper function rol64.
+ + commit 6c882fb1fdb6c7cba2215fa7391110d63e24b9dc
+ * cipher/bithelp.h (rol64): New inline functions.
+
+ New hardware feature flag HWF_INTEL_RDTSC.
+ + commit 06f303a633ea2b992259688bef2b023c3f388f73
+ * src/g10lib.h (HWF_INTEL_RDTSC): New.
+ * src/hwfeatures.c (hwflist): Add "intel-rdtsc".
+ * src/hwf-x86.c (detect_x86_gnuc): Get EDX features and test for TSC.
+
+ random: Changes to original Jitter RNG implementation.
+ + commit a44c45675f8b631e11048a540bb1fbb7a022ebb4
+ * random/jitterentropy-base.c: Change double underscore symbols and
+ make all functions static.
+ * random/jitterentropy.h: Likewise.
+
+2017-06-13 Stephan Mueller <smueller@chronox.de>
+
+ random: Add original Jitter RNG implementation.
+ + commit f0ae18ecf48fbe2da0b9fb3f354d0dd3173d91d3
+ * random/jitterentropy-base-user.h: New.
+ * random/jitterentropy-base.c: New.
+ * random/jitterentropy.h: New.
+
+2017-06-08 Werner Koch <wk@gnupg.org>
+
+ build: Fix ChangeLog building for builds from other worktrees.
+ + commit cdfd7ea72a44657f037dd0dbba6e5ea0c2b344aa
+ * Makefile.am (gen-ChangeLog): Test for existance of ".git" regardless
+ on whether it is a file or directory.
+
+2017-06-02 NIIBE Yutaka <gniibe@fsij.org>
+
+ secmem: Fix SEGV and stat calculation.
+ + commit e0958debe1a7db1bec1283115cdc6a14bf3b43e5
+ * src/secmem (init_pool): Care about the header size.
+ (_gcry_secmem_malloc_internal): Likewise.
+ (_gcry_secmem_malloc_internal): Use mb->size for stats.
+
+2017-06-01 Jo Van Bulck <jo.vanbulck@cs.kuleuven.be>
+
+ ecc: Store EdDSA session key in secure memory.
+ + commit 5a22de904a0a366ae79f03ff1e13a1232a89e26b
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_sign): use mpi_snew to allocate
+ session key.
+
+2017-05-31 Werner Koch <wk@gnupg.org>
+
+ api: Deprecate gcry_md_info.
+ + commit 45c39340c9926c2c5801dbab7609687c41e9ff1f
+
+
+2017-05-30 Werner Koch <wk@gnupg.org>
+
+ mpi: Distribute asm files for aarch64 and asm.
+ + commit c65f9558f12ffa2810538ef616e71b4052dacb81
+ * mpi/aarch64/distfiles: New.
+ * mpi/arm/distfiles: New.
+
+ mpi: Distribute asm definitions for amd64.
+ + commit 87e481137debabb7f989d7fa9b1c21c336e10c98
+ * mpi/amd64/distfiles: Add mpi-asm-defs.h.
+
+2017-05-23 Werner Koch <wk@gnupg.org>
+
+ cipher: Fix compiler warnings.
+ + commit d764c9894013727ff82eb194da6030209c273528
+ * cipher/poly1305.c (poly1305_default_ops): Move to the top. Add
+ prototypes and compile only if USE_SSE2 is not defined.
+ (poly1305_init_ext_ref32): Compile only if USE_SSE2 is not defined.
+ (poly1305_blocks_ref32): Ditto.
+ (poly1305_finish_ext_ref32): Ditto.
+
+ doc: Comment fixes.
+ + commit c1bb3d9fdb6fe5f336af1d5a03fc42bfdc1f8b0b
+
+
+2017-05-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-ssse3: fix functions calls from assembly blocks.
+ + commit 4cd94994a9abec9b92fa5972869baf089a28fa76
+ * cipher/rijndael-ssse3-amd64.c (PUSH_STACK_PTR, POP_STACK_PTR): New.
+ (vpaes_ssse3_prepare_enc, vpaes_ssse3_prepare_dec)
+ (_gcry_aes_ssse3_do_setkey, _gcry_aes_ssse3_prepare_decryption)
+ (do_vpaes_ssse3_enc, do_vpaes_ssse3_dec): Use PUSH_STACK_PTR and
+ POP_STACK_PTR.
+
+ chacha20-armv7-neon: fix to use fast code path when memory is aligned.
+ + commit 68861ae5d3e007d7a39f14ea27dc3dd8ef13ba02
+ * cipher/chacha20-armv7-neon.S (UNALIGNED_LDMIA4): Uncomment
+ instruction for jump to aligned code path.
+
+ Move data in AMD64 assembly to text section.
+ + commit 1a094bc5b2aa730833faf593a931d4e5d7f9ab4d
+ * cipher/camellia-aesni-avx-amd64.S: Move data to .text section to
+ ensure that RIP relative addressing of data will work.
+ * cipher/camellia-aesni-avx2-amd64.S: Ditto.
+ * cipher/chacha20-avx2-amd64.S: Ditto.
+ * cipher/chacha20-ssse3-amd64.S: Ditto.
+ * cipher/des-amd64.S: Ditto.
+ * cipher/serpent-avx2-amd64.S: Ditto.
+ * cipher/sha1-avx-amd64.S: Ditto.
+ * cipher/sha1-avx-bmi2-amd64.S: Ditto.
+ * cipher/sha1-ssse3-amd64.S: Ditto.
+ * cipher/sha256-avx-amd64.S: Ditto.
+ * cipher/sha256-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha256-ssse3-amd64.S: Ditto.
+ * cipher/sha512-avx-amd64.S: Ditto.
+ * cipher/sha512-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha512-ssse3-amd64.S: Ditto.
+
+ cast5-amd64: use 64-bit relocation with large PIC memory model.
+ + commit ff02fca39c83bcf30c79368611ac65e273e77f6c
+ * cipher/cast5-amd64.S [__code_model_large__]
+ (GET_EXTERN_POINTER): New.
+
+2017-05-13 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix building with x86-64 medium and large memory models.
+ + commit 434d4f2af39033fc626044ba9a060da298522293
+ * cipher/cast5-amd64.S [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]
+ (GET_EXTERN_POINTER): Load 64-bit address instead of 32-bit.
+ * cipher/rijndael.c (do_encrypt, do_decrypt)
+ [USE_AMD64_ASM && !HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS]: Load
+ table pointer through register instead of generic reference.
+
+2017-04-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Simplify mpi_powm.
+ + commit 719468e53133d3bdf12156c5bfdea2bf15f9f6f1
+ * mpi/mpi-pow.c (_gcry_mpi_powm): Simplify the loop.
+
+2017-03-08 Justus Winter <justus@g10code.com>
+
+ build: Use macOS' compatibility macros to enable all features.
+ + commit 654024081cfa103c87bb163b117ea3568171d408
+ * configure.ac: On macOS, use the compatibility macros to expose every
+ feature of the libc. This is the equivalent of _GNU_SOURCE on GNU
+ libc.
+
+2017-02-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add BLAKE2b and BLAKE2s hash algorithms (RFC 7693)
+ + commit 5bd530b8a4624f101b8d42e68f1b28bcc13f4f76
+ * cipher/blake2.c: New.
+ * cipher/Makefile.am: Add 'blake2.c'.
+ * cipher/md.c (digest_list, prepare_macpads): Add BLAKE2.
+ (md_setkey): New.
+ (_gcry_md_setkey): Call 'md_setkey' for non-HMAC md.
+ * configure.ac: Add BLAKE2 digest.
+ * doc/gcrypt.texi: Add BLAKE2.
+ * src/cipher.h (_gcry_blake2_init_with_key)
+ (_gcry_digest_spec_blake2b_512, _gcry_digest_spec_blake2b_384)
+ (_gcry_digest_spec_blake2b_256, _gcry_digest_spec_blake2b_160)
+ (_gcry_digest_spec_blake2s_256, _gcry_digest_spec_blake2s_224)
+ (_gcry_digest_spec_blake2s_160, _gcry_digest_spec_blake2s_128): New.
+ * src/gcrypt.h.in (GCRY_MD_BLAKE2B_512, GCRY_MD_BLAKE2B_384)
+ (GCRY_MD_BLAKE2B_256, GCRY_MD_BLAKE2B_160, GCRY_MD_BLAKE2S_256)
+ (GCRY_MD_BLAKE2S_224, GCRY_MD_BLAKE2S_160, GCRY_MD_BLAKE2S_128): New.
+ * tests/basic.c (check_one_md): Add testing for keyed hashes.
+ (check_digests): Add BLAKE2 test vectors; Add testing for keyed hashes.
+ * tests/blake2b.h: New.
+ * tests/blake2s.h: New.
+ * tests/Makefile.am: Add 'blake2b.h' and 'blake2s.h'.
+
+ Fix building with clang on ARM64/FreeBSD.
+ + commit da213db2c6cda6f57e5853e8c591d69bfa1cfa74
+ * cipher/cipher-gcm-armv8-aarch64-ce.S: Use '.cpu generic+simd+crypto'
+ instead of '.arch armv8-a+crypto'.
+ * cipher/rijndael-armv8-aarch64-ce.S: Ditto.
+ * cipher/sha1-armv8-aarch64-ce.S: Ditto.
+ * cipher/sha256-armv8-aarch64-ce.S: Ditto.
+ * configure.ac (gcry_cv_gcc_inline_asm_aarch64_neon): Ditto.
+ (gcry_cv_gcc_inline_asm_aarch64_crypto): Ditto; and include NEON
+ instructions to crypto instructions check.
+
+2017-02-07 Justus Winter <justus@g10code.com>
+
+ Fix building with a pre C99 compiler.
+ + commit 75d91ffeaf83098ade325bb3b6b2c8a76eb1f6a6
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb8_encrypt): Move the
+ declaration of 'i' out of the loop.
+ (_gcry_cipher_cfb8_decrypt): Likewise.
+
+2017-02-04 Mathias L. Baumann <mathias.baumann_at_sociomantic.com>
+
+ Implement CFB with 8-bit mode.
+ + commit d1ee9a660571ce4a998c9ab2299d4f2419f99127
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb8_encrypt)
+ (_gcry_cipher_cfg8_decrypt): Add 8-bit variants of decrypt/encrypt
+ functions.
+ * cipher/cipher-internal.h (_gcry_cipher_cfb8_encrypt)
+ (_gcry_cipher_cfg8_decrypt): Ditto.
+ * cipher/cipher.c: Adjust code flow to work with GCRY_CIPHER_MODE_CFB8.
+ * tests/basic.c: Add tests for cfb8 with AES and 3DES.
+
+2017-02-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rndhw: add missing "memory" clobbers.
+ + commit c67c728478e8f47b6e8296b643fd35d66d4a1052
+ * random/rndhw.c: (poll_padlock, rdrand_long): Add "memory" to asm
+ clobbers.
+
+ Add UNLIKELY and LIKELY macros.
+ + commit 4b7451d3e8e7b87d8e407fbbd924ad5b13bd0f00
+ * src/g10lib.h (LIKELY, UNLIKELY): New.
+ (gcry_assert): Use LIKELY for assert check.
+ (fast_wipememory2_unaligned_head): Use UNLIKELY for unaligned
+ branching.
+ * cipher/bufhelp.h (buf_cpy, buf_xor, buf_xor_1, buf_xor_2dst)
+ (buf_xor_n_copy_2): Ditto.
+
+ rndhw: avoid type-punching.
+ + commit 37b537600f33fcf8e1c8dc2c658a142fbba44199
+ * random/rndhw.c (rdrand_long, rdrand_nlong): Add 'volatile' for
+ pointer.
+ (poll_drng): Convert buffer to 'unsigned long[]' and make use of DIM
+ macro.
+
+2017-01-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ hwf-x86: avoid type-punching.
+ + commit 1407317a6112a23d4fec5827a9d74faef4196f66
+ * src/hwf-x86.c (detect_x86_gnuc): Use union for vendor_id.
+
+ cipher: add explicit blocksize checks to allow better optimization.
+ + commit efa9042f82ffed3d076b8e26ac62d29e00bb756a
+ * cipher/cipher-cbc.c (_gcry_cipher_cbc_encrypt)
+ (_gcry_cipher_cbc_decrypt): Add explicit check for cipher blocksize of
+ 64-bit or 128-bit.
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb_encrypt)
+ (_gcry_cipher_cfb_decrypt): Ditto.
+ * cipher/cipher-cmac.c (cmac_write, cmac_generate_subkeys)
+ (cmac_final): Ditto.
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Ditto.
+ * cipher/cipher-ofb.c (_gcry_cipher_ofb_encrypt): Ditto.
+
+ bufhelp: use unaligned dword and qword types for endianess helpers.
+ + commit e7b941c3de9c9b6319298c02f844cc0cadbf8562
+ * cipher/bufhelp.h (BUFHELP_UNALIGNED_ACCESS): New, defined
+ if attributes 'packed', 'aligned' and 'may_alias' are supported.
+ (BUFHELP_FAST_UNALIGNED_ACCESS): Define if have
+ BUFHELP_UNALIGNED_ACCESS.
+
+ rijndael-aesni: fix u128_t strict-aliasing rule breaking.
+ + commit 92b4a29d2453712192ced2d7226abc49679dcb1e
+ * cipher/rijndael-aesni.c (u128_t): Add attributes to tell GCC and clang
+ that casting from 'char *' to 'u128_t *' is ok.
+
+ cipher-xts: fix pointer casting to wrong alignment and aliasing.
+ + commit 4f31d816dcc1e95dc647651e92acbdfed53f5c14
+ * cipher/cipher-xts.c (xts_gfmul_byA, xts_inc128): Use buf_get_le64
+ and buf_put_le64 for accessing data; Change parameter pointers to
+ 'unsigned char *' type.
+ (_gcry_cipher_xts_crypt): Do not cast buffer pointers to 'u64 *'
+ for helper functions.
+
+ crc-intel-pclmul: fix undefined behavior with unaligned access.
+ + commit 55cf1b5588705cab5f45e2817c4aa1d204dc0042
+ * cipher/crc-intel-pclmul.c (u16_unaligned_s): New.
+ (crc32_reflected_less_than_16, crc32_less_than_16): Use
+ 'u16_unaligned_s' for unaligned memory access.
+
+ configure.ac: fix attribute checks.
+ + commit b29b1b9f576f501d4b993be0a751567045274a1a
+ * configure.ac: Add -Werror flag for attribute checks.
+
+ configure.ac: fix may_alias attribute check.
+ + commit 136c8416ea540dd126be3997d94d7063b3aaf577
+ * configure.ac: Test may_alias attribute on type, not on variable.
+
+ bufhelp: add 'may_alias' attribute for properly aligned 'bufhelp_int_t'
+ + commit d1ae52a0e23308f33b78cffeba56005b687f23c0
+ * cipher/bufhelp.h [!BUFHELP_FAST_UNALIGNED_ACCESS]
+ (bufhelp_int_t): Add 'may_alias' attribute.
+
+2017-01-27 Werner Koch <wk@gnupg.org>
+
+ w32: New envvar GCRYPT_RNDW32_DBG.
+ + commit a351fbde8548ce3f57298c618426f043844fbc78
+ * random/rndw32.c (_gcry_rndw32_gather_random): Use getenv to set
+ DEBUG_ME.
+
+2017-01-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-ssse3-amd64: fix building on x32.
+ + commit 39b9302da5d08bd52688d20befe626fee0b6c41d
+ * cipher/rijndael-ssse3-amd64.c: Use 64-bit call instructions
+ with 64-bit registers.
+
+ bufhelp: use 'may_alias' attribute unaligned pointer types.
+ + commit bf9e0b79e620ca2324224893b07522462b125412
+ * configure.ac (gcry_cv_gcc_attribute_may_alias)
+ (HAVE_GCC_ATTRIBUTE_MAY_ALIAS): New check for 'may_alias' attribute.
+ * cipher/bufhelp.h (BUFHELP_FAST_UNALIGNED_ACCESS): Enable only if
+ HAVE_GCC_ATTRIBUTE_MAY_ALIAS is defined.
+ [BUFHELP_FAST_UNALIGNED_ACCESS] (bufhelp_int_t, bufhelp_u32_t)
+ (bufhelp_u64_t): Add 'may_alias' attribute.
+ * src/g10lib.h (fast_wipememory_t): Add HAVE_GCC_ATTRIBUTE_MAY_ALIAS
+ defined check; Add 'may_alias' attribute.
+
+2017-01-18 Werner Koch <wk@gnupg.org>
+
+ random: Call getrandom before select and emitting a progress callback.
+ + commit 623aab8a940ea61afe3fef650ad485a755ed9fe7
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Move the getrandom
+ call before the select.
+
+2017-01-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ mpi: amd64: fix too large jump alignment in mpih-rshift.
+ + commit ddcfe31e2425e88b280e7cdaf3f0eaaad8ccc023
+ * mpi/amd64/mpih-rshift.S (_gcry_mpih_rshift): Use 16-byte alignment
+ with 'ALIGN(4)' instead of 256-byte.
+
+ rijndael-ssse3: move assembly functions to separate source-file.
+ + commit 54c57bc49edb5c00e9ed8103cc4837bb72c5e863
+ * cipher/Makefile.am: Add 'rinjdael-ssse3-amd64-asm.S'.
+ * cipher/rinjdael-ssse3-amd64-asm.S: Moved assembly functions
+ here ...
+ * cipher/rinjdael-ssse3-amd64.c: ... from this file.
+ (_gcry_aes_ssse3_enc_preload, _gcry_aes_ssse3_dec_preload)
+ (_gcry_aes_ssse3_shedule_core, _gcry_aes_ssse3_encrypt_core)
+ (_gcry_aes_ssse3_decrypt_core): New.
+ (vpaes_ssse3_prepare_enc, vpaes_ssse3_prepare_dec)
+ (_gcry_aes_ssse3_do_setkey, _gcry_aes_ssse3_prepare_decryption)
+ (do_vpaes_ssse3_enc, do_vpaes_ssse3_dec): Update to use external
+ assembly functions; remove 'aes_const_ptr' variable usage.
+ (_gcry_aes_ssse3_encrypt, _gcry_aes_ssse3_decrypt)
+ (_gcry_aes_ssse3_cfb_enc, _gcry_aes_ssse3_cbc_enc)
+ (_gcry_aes_ssse3_ctr_enc, _gcry_aes_ssse3_cfb_dec)
+ (_gcry_aes_ssse3_cbc_dec, ssse3_ocb_enc, ssse3_ocb_dec)
+ (_gcry_aes_ssse3_ocb_auth): Remove 'aes_const_ptr' variable usage.
+ * configure.ac: Add 'rinjdael-ssse3-amd64-asm.lo'.
+
+ Add AVX2/vpgather bulk implementation of Twofish.
+ + commit c59a8ce51ceb9a80169c44ef86a67e95cf8528c3
+ * cipher/Makefile.am: Add 'twofish-avx2-amd64.S'.
+ * cipher/twofish-avx2-amd64.S: New.
+ * cipher/twofish.c (USE_AVX2): New.
+ (TWOFISH_context) [USE_AVX2]: Add 'use_avx2' member.
+ (ASM_FUNC_ABI): New.
+ (twofish_setkey): Add check for AVX2 and fast VPGATHER HW features.
+ (_gcry_twofish_avx2_ctr_enc, _gcry_twofish_avx2_cbc_dec)
+ (_gcry_twofish_avx2_cfb_dec, _gcry_twofish_avx2_ocb_enc)
+ (_gcry_twofish_avx2_ocb_dec, _gcry_twofish_avx2_ocb_auth): New.
+ (_gcry_twofish_ctr_enc, _gcry_twofish_cbc_dec, _gcry_twofish_cfb_dec)
+ (_gcry_twofish_ocb_crypt, _gcry_twofish_ocb_auth): Add AVX2 bulk
+ handling.
+ (selftest_ctr, selftest_cbc, selftest_cfb): Increase nblocks from
+ 3+X to 16+X.
+ * configure.ac: Add 'twofish-avx2-amd64.lo'.
+ * src/g10lib.h (HWF_INTEL_FAST_VPGATHER): New.
+ * src/hwf-x86.c (detect_x86_gnuc): Add detection for
+ HWF_INTEL_FAST_VPGATHER.
+ * src/hwfeatures.c (HWF_INTEL_FAST_VPGATHER): Add
+ "intel-fast-vpgather" for HWF_INTEL_FAST_VPGATHER.
+
+ Add XTS cipher mode.
+ + commit 232a129b1f915fc54881506e4b07c89cf84932e6
+ * cipher/Makefile.am: Add 'cipher-xts.c'.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add 'bulk.xts_crypt'
+ and 'u_mode.xts' members.
+ (_gcry_cipher_xts_crypt): New prototype.
+ * cipher/cipher-xts.c: New.
+ * cipher/cipher.c (_gcry_cipher_open_internal, cipher_setkey)
+ (cipher_reset, cipher_encrypt, cipher_decrypt): Add XTS mode handling.
+ * doc/gcrypt.texi: Add XTS mode to documentation.
+ * src/gcrypt.h.in (GCRY_CIPHER_MODE_XTS, GCRY_XTS_BLOCK_LEN): New.
+ * tests/basic.c (do_check_xts_cipher, check_xts_cipher): New.
+ (check_bulk_cipher_modes): Add XTS test-vectors.
+ (check_one_cipher_core, check_one_cipher, check_ciphers): Add XTS
+ testing support.
+ (check_cipher_modes): Add XTS test.
+ * tests/bench-slope.c (bench_xts_encrypt_init)
+ (bench_xts_encrypt_do_bench, bench_xts_decrypt_do_bench)
+ (xts_encrypt_ops, xts_decrypt_ops): New.
+ (cipher_modes, cipher_bench_one): Add XTS.
+ * tests/benchmark.c (cipher_bench): Add XTS testing.
+
+2017-01-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael-ssse3: fix counter operand from read-only to read/write.
+ + commit aada604594fd42224d366d3cb98f67fd3b989cd6
+ * cipher/rijndael-ssse3-amd64.c (_gcry_aes_ssse3_ctr_enc): Change
+ 'ctrlow' operand from read-only to read-write.
+
+2017-01-03 Werner Koch <wk@gnupg.org>
+
+ Extend GCRYCTL_PRINT_CONFIG to print compiler version.
+ + commit 98b49695b1ffe3c406ae39a45051b8594f903b9d
+ * src/global.c (print_config): Print version of libgpg-error and used
+ compiler.
+
+ tests: Add option --disable-hwf to the version utility.
+ + commit 3582641469f1c74078f0d758c4d5458cc0ee5649
+ * src/hwfeatures.c (_gcry_disable_hw_feature): Rewrite to allow
+ passing a colon delimited feature set.
+ (parse_hwf_deny_file): Remove unused var I.
+ * tests/version.c (main): Add options --verbose and --disable-hwf.
+
+2016-12-15 Werner Koch <wk@gnupg.org>
+ Nicolas Porcel <nicolasporcel06@gmail.com>
+
+ Fix regression in broken mlock detection.
+ + commit 0a90f87799903a3fb97189ef7cba19e7b3534e1c
+ * acinclude.m4 (GNUPG_CHECK_MLOCK): Fix typo EGAIN->EAGAIN.
+
+2016-12-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ hwfeatures: add 'all' for disabling all hardware features.
+ + commit c83d0d2a26059cf471d09f5cb8e7fc5d76c4907b
+ * .gitignore: Add 'tests/basic-disable-all-hwf'.
+ * configure.ac: Ditto.
+ * tests/Makefile.am: Ditto.
+ * src/hwfeatures.c (_gcry_disable_hw_feature): Match 'all' for
+ masking all HW features off.
+ (parse_hwf_deny_file): Use '_gcry_disable_hw_feature' for matching.
+ * tests/basic-disable-all-hwf.in: New.
+
+ tests/hashtest-256g: add missing executable extension for Win32.
+ + commit 2b7b227b8a0bd5ff286258bc187782efac180a7e
+ * tests/hashtest-256g.in: Add @EXEEXT@.
+
+ OCB ARM CE: Move ocb_get_l handling to assembly part.
+ + commit 5c418e597f0f20a546d953161695e6caf1f57689
+ * cipher/rijndael-armv8-aarch32-ce.S: Add OCB 'L_{ntz(i)}' calculation.
+ * cipher/rijndael-armv8-aarch64-ce.S: Ditto.
+ * cipher/rijndael-armv8-ce.c (_gcry_aes_ocb_enc_armv8_ce)
+ (_gcry_aes_ocb_dec_armv8_ce, _gcry_aes_ocb_auth_armv8_ce)
+ (ocb_cryt_fn_t): Updated arguments.
+ (_gcry_aes_armv8_ce_ocb_crypt, _gcry_aes_armv8_ce_ocb_auth): Remove
+ 'ocb_get_l' handling and splitting input to 32 block chunks, instead
+ pass full buffers to assembly.
+
+ OCB: Move large L handling from bottom to upper level.
+ + commit 2d2e5286d53e1f62fe040dff4c6e01961f00afe2
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_get_l): Remove.
+ (ocb_get_L_big): New.
+ (_gcry_cipher_ocb_authenticate): L-big handling done in upper
+ processing loop, so that lower level never sees the case where
+ 'aad_nblocks % 65536 == 0'; Add missing stack burn.
+ (ocb_aad_finalize): Add missing stack burn.
+ (ocb_crypt): L-big handling done in upper processing loop, so that
+ lower level never sees the case where 'data_nblocks % 65536 == 0'.
+ * cipher/cipher-internal.h (_gcry_cipher_ocb_get_l): Remove.
+ (ocb_get_l): Remove 'l_tmp' usage and simplify since input
+ is more limited now, 'N is not multiple of 65536'.
+ * cipher/rijndael-aesni.c (get_l): Remove.
+ (aesni_ocb_enc, aesni_ocb_dec, _gcry_aes_aesni_ocb_auth): Remove
+ l_tmp; Use 'ocb_get_l'.
+ * cipher/rijndael-ssse3-amd64.c (get_l): Remove.
+ (ssse3_ocb_enc, ssse3_ocb_dec, _gcry_aes_ssse3_ocb_auth): Remove
+ l_tmp; Use 'ocb_get_l'.
+ * cipher/camellia-glue.c: Remove OCB l_tmp usage.
+ * cipher/rijndael-armv8-ce.c: Ditto.
+ * cipher/rijndael.c: Ditto.
+ * cipher/serpent.c: Ditto.
+ * cipher/twofish.c: Ditto.
+
+ OCB: remove 'int64_t' usage.
+ + commit 161d339f48c03be7fd0f4249d730f7f1767ef8e4
+ * cipher/cipher-ocb.c (double_block): Use alternative way to generate
+ sign-bit mask, without 'int64_t'.
+
+ random-drbg: use bufhelp function for big-endian store.
+ + commit 0b03b658bebc69a84d87ef13f9b60a27b0c42305
+ * random/random-drbg.c (drbg_cpu_to_be32): Remove.
+ (drbg_ctr_df, drbg_hash_df): Use 'buf_put_be32' instead of
+ 'drbg_cpu_to_be32'.
+
+2016-12-09 Werner Koch <wk@gnupg.org>
+
+ Improve handling of mlock error codes.
+ + commit 618b8978f46f4011c11512fd5f30c15e01652e2e
+ * acinclude.m4 (GNUPG_CHECK_MLOCK): Check also for EAGAIN which is a
+ legitimate return code and does not indicate a broken mlock().
+ * src/secmem.c (lock_pool_pages): Test ERR instead of ERRNO which
+ could have been overwritten by cap_from+text et al.
+
+2016-12-08 Stephan Mueller <smueller@chronox.de>
+
+ random: Eliminate unneeded memcpy invocations in the DRBG.
+ + commit 656395ba4cf34f42dda3a120bda3ed1220755a3d
+ * random/random-drbg.c (drbg_hash): Remove arg 'outval' and return a
+ pointer instead.
+ (drbg_instantiate): Reduce size of scratchpad.
+ (drbg_hmac_update): Avoid use of scratch buffers for the hash.
+ (drbg_hmac_generate, drbg_hash_df): Ditto.
+ (drbg_hash_process_addtl): Ditto.
+ (drbg_hash_hashgen): Ditto.
+ (drbg_hash_generate): Ditto.
+
+ random: Add performance improvements for the DRBG.
+ + commit 20886fdcb841b0bf89bb1d44303d42f1804e38cb
+ * random/random-drbg.c (struct drbg_state_ops_s): New function
+ pointers 'crypto_init' and 'crypto-fini'.
+ (struct drbg_state_s): New fields 'priv_data', 'ctr_handle', and
+ 'ctr_null'.
+ (drbg_hash_init, drbg_hash_fini): New.
+ (drbg_hmac_init, drbg_hmac_setkey): New.
+ (drbg_sym_fini, drbg_sym_init, drbg_sym_setkey): New.
+ (drbg_sym_ctr): New.
+ (drbg_ctr_bcc): Set the key.
+ (drbg_ctr_df): Ditto.
+ (drbg_hmac_update): Ditto.
+ (drbg_hmac_generate): Replace drgb_hmac by drbg_hash.
+ (drbg_hash_df): Ditto.
+ (drbg_hash_process_addtl): Ditto.
+ (drbg_hash_hashgen): Ditto.
+ (drbg_ctr_update): Rework.
+ (drbg_ctr_generate): Rework.
+ (drbg_ctr_ops): Init new functions pointers.
+ (drbg_uninstantiate): Call fini function.
+ (drbg_instantiate): Call init function.
+
+ cipher: New function for reading the counter in CTR mode.
+ + commit 227099f179df9dcf083d0ef6be9883c775df0874
+ * cipher/cipher.c (gcry_cipher_getctr): New.
+
+2016-12-07 Werner Koch <wk@gnupg.org>
+
+ Document the overflow pools and add a stupid test case.
+ + commit 95bac312644ad45e486c94c2efd25d0748b9a20b
+ * tests/t-secmem.c (test_secmem_overflow): New func.
+ (main): Disable warning and call new function.
+
+ Implement overflow secmem pools for xmalloc style allocators.
+ + commit b6870cf25c0b1eb9c127a94af8326c446421a472
+ * src/secmem.c (pooldesc_s): Add fields next, cur_alloced, and
+ cur_blocks.
+ (cur_alloced, cur_blocks): Remove vars.
+ (ptr_into_pool_p): Make it inline.
+ (stats_update): Add arg pool and update the new pool specific
+ counters.
+ (_gcry_secmem_malloc_internal): Add arg xhint and allocate overflow
+ pools as needed.
+ (_gcry_secmem_malloc): Pass XHINTS along.
+ (_gcry_secmem_realloc_internal): Ditto.
+ (_gcry_secmem_realloc): Ditto.
+ (_gcry_secmem_free_internal): Take multiple pools in account. Add
+ return value to indicate whether the arg was freed.
+ (_gcry_secmem_free): Add return value to indicate whether the arg was
+ freed.
+ (_gcry_private_is_secure): Take multiple pools in account.
+ (_gcry_secmem_term): Release all pools.
+ (_gcry_secmem_dump_stats): Print stats for all pools.
+ * src/stdmem.c (_gcry_private_free): Replace _gcry_private_is_secure
+ test with a direct call of _gcry_secmem_free to avoid double checking.
+
+ Give the secmem allocators a hint when a xmalloc calls them.
+ + commit b7df907dca4d525f8930c533b763ffce44ceed87
+ * src/secmem.c (_gcry_secmem_malloc): New not yet used arg XHINT.
+ (_gcry_secmem_realloc): Ditto.
+ * src/stdmem.c (_gcry_private_malloc_secure): New arg XHINT to be
+ passed to the secmem functions.
+ (_gcry_private_realloc): Ditto.
+ * src/g10lib.h (GCRY_ALLOC_FLAG_XHINT): New.
+ * src/global.c (do_malloc): Pass this flag as XHINT to the private
+ allocator.
+ (_gcry_malloc_secure): Factor code out to ...
+ (_gcry_malloc_secure_core): this. Add arg XHINT.
+ (_gcry_realloc): Factor code out to ...
+ (_gcry_realloc_core): here. Add arg XHINT.
+ (_gcry_strdup): Factor code out to ...
+ (_gcry_strdup_core): here. Add arg XHINT.
+ (_gcry_xrealloc): Use the core function and pass true for XHINT.
+ (_gcry_xmalloc_secure): Ditto.
+ (_gcry_xstrdup): Ditto.
+
+ tests: New test t-secmem.
+ + commit e366c19b34922c770af82cd035fd815680b29dee
+ * src/secmem.c (_gcry_secmem_dump_stats): Add arg EXTENDED and adjust
+ caller.
+ * src/gcrypt-testapi.h (PRIV_CTL_DUMP_SECMEM_STATS): New.
+ * src/global.c (_gcry_vcontrol): Implement that.
+ * tests/t-secmem.c: New.
+ * tests/Makefile.am (tests_bin): Add that test.
+
+2016-12-06 Werner Koch <wk@gnupg.org>
+
+ Fix compiler warning about possible-NULL-dreference.
+ + commit 995ce697308320c6a52a307f83dc49eeb8d784b4
+ * src/mpi.h (mpi_is_const, mpi_is_immutable): Do check arg before
+ deref-ing. The are only used at places where the arg shall not be NULL.
+
+ Fix possible NULL-deref in gcry_log_debugsxp.
+ + commit 984a97f0750f812f0ad3c343ee6a67560953a504
+ * src/misc.c (_gcry_log_printsxp): Prevent passing NULL to strlen.
+
+ Reorganize code in secmem.c.
+ + commit 603f479a919311f720a05da738150c2192d5e562
+ * src/secmem.c (pooldesc_t): New type to collect information about one
+ pool.
+ (pool_size): Remove. Now a member of pooldesc_t.
+ (pool_okay): Ditto.
+ (pool_is_mmapped): Ditto.
+ (pool): Rename variable ...
+ (mainpool): And change type to pooldesc_t.
+ (ptr_into_pool_p): Add arg 'pool'.
+ (mb_get_next): Ditto.
+ (mb_get_prev): Ditto.
+ (mb_merge): Ditto.
+ (mb_get_new): Ditto.
+ (init_pool): Ditto.
+ (lock_pool): Rename to ...
+ (look_pool_pages: this.
+ (secmem_init): Rename to ...
+ (_gcry_secmem_init_internal): this. Add local var POOL and init with
+ address of MAINPOOL.
+ (_gcry_secmem_malloc_internal): Add local var POOL and init with
+ address of MAINPOOL.
+ (_gcry_private_is_secure): Ditto.
+ (_gcry_secmem_term): Ditto.
+ (_gcry_secmem_dump_stats): Ditto.
+ (_gcry_secmem_free_internal): Ditto. Remove check for NULL arg.
+ (_gcry_secmem_free): Add check for NULL arg before taking the lock.
+ (_gcry_secmem_realloc): Factor most code out to ...
+ (_gcry_secmem_realloc_internal): this.
+
+2016-11-28 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ tests: Add PBKDF2 tests for Stribog512.
+ + commit a0580d446fef648a177ca4ab060d0e449780db84
+ * tests/t-kdf.c (check_pbkdf2): Add Stribog512 test cases from TC26's
+ additions to PKCS#5.
+
+ tests: Add Stribog HMAC tests from TC26ALG.
+ + commit fe6077e6ee8565bfcc91bad14a73e68f45b3c32b
+ * tests/basic.c (check_mac): add HMAC test vectors from TC26ALG document
+ for Stribog.
+
+ cipher: Add Stribog OIDs from TC26 space.
+ + commit ccffacaf6c3abe6120a0898db922981d28ab7af2
+ * cipher/stribog.c (oid_spec_stribog256, oid_spec_stribog512): New.
+
+2016-11-25 Justus Winter <justus@g10code.com>
+
+ tests: Fix memory leak.
+ + commit 5530a8234d703ce9b685f78fb6e951136eb0aeb2
+ * tests/basic.c (check_gost28147_cipher): Free cipher handles.
+
+2016-11-25 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Cast oid argument of gcry_cipher_set_sbox to disable compiler warning.
+ + commit 1a67e3195896704f8b3ba09e3db1214bab834491
+ * src/gcrypt.h.in (gcry_cipher_set_sbox): Cast oid to (void *).
+
+ gost: Rename tc26 s-box from A to Z.
+ + commit dc8ceb8d2dfef949f3afa14fc75f9de8cd07c7ad
+ * cipher/gost-s-box.c (gost_sboxes): Rename TC26_A to TC26_Z as it is
+ the name that ended up in all standards.
+
+ tests: Add test to verify GOST 28147-89 against known results.
+ + commit 4f5c26c73c66daf2e4aff966e43c22b2db7e0138
+ * tests/basic.c (check_gost28147_cipher): new test function.
+
+2016-11-17 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ cipher/gost28147: Fix CryptoPro-B S-BOX.
+ + commit 5ca63c92825453fdb369a97bbc19cb95b49b4296
+ * cipher/gost-s-box.c: CryptoPro_B s-box missed one line, resulting in
+ incorrect encryption/decryption using that s-box. Add missing data.
+
+2016-11-12 Werner Koch <wk@gnupg.org>
+
+ Put blocking calls into Libgpg-error's system call clamp.
+ + commit b829dfe9f0eeff08c956ba3f3a6b559b9d2199dd
+ * src/gcrypt.h.in (GCRYCTL_REINIT_SYSCALL_CLAMP): New.
+ * configure.ac: Require Libgpg-error 1.25. Set version number to
+ 1.8.0.
+ * src/gcrypt-int.h: Remove error code emulation.
+ * src/global.c (pre_syscall_func, post_syscall_func): New.
+ (global_init): Call gpgrt_get_syscall_clamp.
+ (_gcry_vcontrol) <GCRYCTL_REINIT_SYSCALL_CLAMP>: Ditto.
+ (_gcry_pre_syscall, _gcry_post_syscall): New.
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Use the new
+ functions.
+
+2016-11-01 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: Fix IDEA cipher for clearing memory.
+ + commit bf6d5b10cb4173826f47ac080506b68bb001acb2
+ * cipher/idea.c (invert_key): Use wipememory, since this kind of memset
+ may be removed by compiler optimization.
+
+2016-10-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ GCM: Add bulk processing for ARMv8/AArch64 implementation.
+ + commit bfd732f53a9b5dfe14217a68a0fa289bf6913ec0
+ * cipher/cipher-gcm-armv8-aarch64-ce.S: Add 6 blocks bulk processing.
+
+ GCM: Add bulk processing for ARMv8/AArch32 implementation.
+ + commit 27747921cb1dfced83c5666cd1c474764724c52b
+ * cipher/cipher-gcm-armv8-aarch32-ce.S: Add 4 blocks bulk processing.
+ * tests/basic.c (check_digests): Print correct data length for "?"
+ tests.
+ (check_one_mac): Add large 1000000 bytes tests, when input is "!" or
+ "?".
+ (check_mac): Add "?" tests vectors for HMAC, CMAC, GMAC and POLY1305.
+
+2016-09-11 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add Aarch64 assembly implementation of Twofish.
+ + commit 5418d9ca4c0e087fd6872ad350a996fe74880d86
+ * cipher/Makefile.am: Add 'twofish-aarch64.S'.
+ * cipher/twofish-aarch64.S: New.
+ * cipher/twofish.c: Enable USE_ARM_ASM if __AARCH64EL__ and
+ HAVE_COMPATIBLE_GCC_AARCH64_PLATFORM_AS defined.
+ * configure.ac [host=aarch64]: Add 'twofish-aarch64.lo'.
+
+2016-09-05 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add Aarch64 assembly implementation of Camellia.
+ + commit de73a2e7237ba7c34ce48bb5fb671aa3993de832
+ * cipher/Makefile.am: Add 'camellia-aarch64.S'.
+ * cipher/camellia-aarch64.S: New.
+ * cipher/camellia-glue.c [USE_ARM_ASM][__aarch64__]: Set stack burn
+ size to zero.
+ * cipher/camellia.h: Enable USE_ARM_ASM if __AARCH64EL__ and
+ HAVE_COMPATIBLE_GCC_AARCH64_PLATFORM_AS defined.
+ * configure.ac [host=aarch64]: Add 'rijndael-aarch64.lo'.
+
+ Add ARMv8/AArch64 Crypto Extension implementation of AES.
+ + commit 4cd8d40d698564d24ece2af24546e34c58bf2961
+ * cipher/Makefile.am: Add 'rijndael-armv-aarch64-ce.S'.
+ * cipher/rijndael-armv8-aarch64-ce.S: New.
+ * cipher/rijndael-internal.h (USE_ARM_CE): Enable for ARMv8/AArch64.
+ * configure.ac: Add 'rijndael-armv-aarch64-ce.lo' and
+ 'rijndael-armv8-ce.lo' for ARMv8/AArch64.
+
+ Add ARMv8/AArch64 Crypto Extension implementation of GCM.
+ + commit 0b332c1aef03a735c1fb0df184f74d523deb2f98
+ * cipher/Makefile.am: Add 'cipher-gcm-armv8-aarch64-ce.S'.
+ * cipher/cipher-gcm-armv8-aarch64-ce.S: New.
+ * cipher/cipher-internal.h (GCM_USE_ARM_PMULL): Enable on
+ ARMv8/AArch64.
+
+ Add ARMv8/AArch64 Crypto Extension implementation of SHA-256.
+ + commit 2d4bbc0ad62c54bbdef77799f9db82d344b7219e
+ * cipher/Makefile.am: Add 'sha256-armv8-aarch64-ce.S'.
+ * cipher/sha256-armv8-aarch64-ce.S: New.
+ * cipher/sha256-armv8-aarch32-ce.S: Move round macros to correct
+ section.
+ * cipher/sha256.c (USE_ARM_CE): Enable on ARMv8/AArch64.
+ * configure.ac: Add 'sha256-armv8-aarch64-ce.lo'; Swap places for
+ 'sha512-arm.lo' and 'sha256-armv8-aarch32-ce.lo'.
+
+ Add ARMv8/AArch64 Crypto Extension implementation of SHA-1.
+ + commit e4eb03f56683317c908cb55be727832810dc8c72
+ * cipher/Makefile.am: Add 'sha1-armv8-aarch64-ce.S'.
+ * cipher/sha1-armv8-aarch64-ce.S: New.
+ * cipher/sha1.c (USE_ARM_CE): Enable on ARMv8/AArch64.
+ * configure.ac: Add 'sha1-armv8-aarch64-ce.lo'.
+
+2016-09-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add AArch64 assembly implementation of AES.
+ + commit 595251ad37bf1968261d7e781752513f67525803
+ * cipher/Makefile.am: Add 'rijndael-aarch64.S'.
+ * cipher/rijndael-aarch64.S: New.
+ * cipher/rijndael-internal.h: Enable USE_ARM_ASM if __AARCH64EL__ and
+ HAVE_COMPATIBLE_GCC_AARCH64_PLATFORM_AS defined.
+ * configure.ac (gcry_cv_gcc_aarch64_platform_as_ok): New check.
+ [host=aarch64]: Add 'rijndael-aarch64.lo'.
+
+2016-08-17 Werner Koch <wk@gnupg.org>
+
+ Release 1.7.3.
+ + commit f8241874971478bdcd2bc2082d901d05db7b256d
+ * configure.ac: Set LT version to C21/A1/R3.
+
+ random: Hash continuous areas in the csprng pool.
+ + commit 8dd45ad957b54b939c288a68720137386c7f6501
+ * random/random-csprng.c (mix_pool): Store the first hash at the end
+ of the pool.
+
+ random: Improve the diagram showing the random mixing.
+ + commit 2f62103b4bb6d6f9ce806e01afb7fdc58aa33513
+ * random/random-csprng.c (mix_pool): Use DIGESTLEN instead of 20.
+
+2016-07-19 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ crc-intel-pclmul: split assembly block to ease register pressure.
+ + commit f38199dbc290003898a1799adc367265267784c2
+ * cipher/crc-intel-pclmul.c (crc32_less_than_16): Split inline
+ assembly block handling 4 byte input into multiple blocks.
+
+ rijndael-aesni: split assembly block to ease register pressure.
+ + commit a4d1595a2638db63ac4c73e722c8ba95fdd85ff7
+ * cipher/rijndael-aesni.c (do_aesni_ctr_4): Use single register
+ constraint for passing 'bige_addb' to assembly block; split
+ first inline assembly block into two parts.
+
+2016-07-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add ARMv8/AArch32 Crypto Extension implementation of AES.
+ + commit 05a4cecae0c02d2b4ee1cadd9c08115beae3a94a
+ * cipher/Makefile.am: Add 'rijndael-armv8-ce.c' and
+ 'rijndael-armv-aarch32-ce.S'.
+ * cipher/rijndael-armv8-aarch32-ce.S: New.
+ * cipher/rijndael-armv8-ce.c: New.
+ * cipher/rijndael-internal.h (USE_ARM_CE): New.
+ (RIJNDAEL_context_s): Add 'use_arm_ce'.
+ * cipher/rijndael.c [USE_ARM_CE] (_gcry_aes_armv8_ce_setkey)
+ (_gcry_aes_armv8_ce_prepare_decryption)
+ (_gcry_aes_armv8_ce_encrypt, _gcry_aes_armv8_ce_decrypt)
+ (_gcry_aes_armv8_ce_cfb_enc, _gcry_aes_armv8_ce_cbc_enc)
+ (_gcry_aes_armv8_ce_ctr_enc, _gcry_aes_armv8_ce_cfb_dec)
+ (_gcry_aes_armv8_ce_cbc_dec, _gcry_aes_armv8_ce_ocb_crypt)
+ (_gcry_aes_armv8_ce_ocb_auth): New.
+ (do_setkey) [USE_ARM_CE]: Add ARM CE/AES HW feature check and key
+ setup for ARM CE.
+ (prepare_decryption, _gcry_aes_cfb_enc, _gcry_aes_cbc_enc)
+ (_gcry_aes_ctr_enc, _gcry_aes_cfb_dec, _gcry_aes_cbc_dec)
+ (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth) [USE_ARM_CE]: Add
+ ARM CE support.
+ * configure.ac: Add 'rijndael-armv8-ce.lo' and
+ 'rijndael-armv8-aarch32-ce.lo'.
+
+ Add ARMv8/AArch32 Crypto Extension implementation of GCM.
+ + commit 962b15470663db11e5c35b86768f1b5d8e600017
+ * cipher/Makefile.am: Add 'cipher-gcm-armv8-aarch32-ce.S'.
+ * cipher/cipher-gcm-armv8-aarch32-ce.S: New.
+ * cipher/cipher-gcm.c [GCM_USE_ARM_PMULL]
+ (_gcry_ghash_setup_armv8_ce_pmull, _gcry_ghash_armv8_ce_pmull)
+ (ghash_setup_armv8_ce_pmull, ghash_armv8_ce_pmull): New.
+ (setupM) [GCM_USE_ARM_PMULL]: Enable ARM PMULL implementation if
+ HWF_ARM_PULL HW feature flag is enabled.
+ * cipher/cipher-gcm.h (GCM_USE_ARM_PMULL): New.
+
+ Add ARMv8/AArch32 Crypto Extension implemenation of SHA-256.
+ + commit 34c64eb03178fbfd34190148fec5a189df2b8f83
+ * cipher/Makefile.am: Add 'sha256-armv8-aarch32-ce.S'.
+ * cipher/sha256-armv8-aarch32-ce.S: New.
+ * cipher/sha256.c (USE_ARM_CE): New.
+ (sha256_init, sha224_init): Check features for HWF_ARM_SHA1.
+ [USE_ARM_CE] (_gcry_sha256_transform_armv8_ce): New.
+ (transform) [USE_ARM_CE]: Use ARMv8 CE implementation if HW supports.
+ (SHA256_CONTEXT): Add 'use_arm_ce'.
+ * configure.ac: Add 'sha256-armv8-aarch32-ce.lo'.
+
+ Add ARMv8/AArch32 Crypto Extension implementation of SHA-1.
+ + commit 3d6334f8d94c2a4df10eed203ae928298a4332ef
+ * cipher/Makefile.am: Add 'sha1-armv8-aarch32-ce.S'.
+ * cipher/sha1-armv7-neon.S (_gcry_sha1_transform_armv7_neon): Add
+ missing size.
+ * cipher/sha1-armv8-aarch32-ce.S: New.
+ * cipher/sha1.c (USE_ARM_CE): New.
+ (sha1_init): Check features for HWF_ARM_SHA1.
+ [USE_ARM_CE] (_gcry_sha1_transform_armv8_ce): New.
+ (transform) [USE_ARM_CE]: Use ARMv8 CE implementation if HW supports
+ it.
+ * cipher/sha1.h (SHA1_CONTEXT): Add 'use_arm_ce'.
+ * configure.ac: Add 'sha1-armv8-aarch32-ce.lo'.
+
+ Add HW feature check for ARMv8 AArch64 and crypto extensions.
+ + commit eee78f6e1fbce7d54c43fb7efc5aa8be9f52755f
+ * configure.ac: Add '--disable-arm-crypto-support'; enable hwf-arm
+ module on 64-bit ARM.
+ (armcryptosupport, gcry_cv_gcc_inline_aarch32_crypto)
+ (gcry_cv_inline_asm_aarch64_neon)
+ (gcry_cv_gcc_inline_asm_aarch64_crypto): New.
+ * src/g10lib.h (HWF_ARM_AES, HWF_ARM_SHA1, HWF_ARM_SHA2)
+ (HWF_ARM_PMULL): New.
+ * src/hwf-arm.c [__aarch64__]: Enable building in AArch64 mode.
+ (feature_map_s): New.
+ [__arm__] (AT_HWCAP, AT_HWCAP2, HWCAP2_AES, HWCAP2_PMULL)
+ (HWCAP2_SHA1, HWCAP2_SHA2, arm_features): New.
+ [__aarch64__] (AT_HWCAP, AT_HWCAP2, HWCAP_ASIMD, HWCAP_AES)
+ (HWCAP_PMULL, HWCAP_SHA1, HWCAP_SHA2, arm_features): New.
+ (get_hwcap): Add reading of 'AT_HWCAP2'; Change auxv use
+ 'unsigned long'.
+ (detect_arm_at_hwcap): Add mapping of HWCAP/HWCAP2 to HWF flags.
+ (detect_arm_proc_cpuinfo): Add mapping of CPU features to HWF flags.
+ (_gcry_hwf_detect_arm): Use __ARM_NEON instead of legacy __ARM_NEON__.
+ * src/hwfeatures.c (hwflist): Add 'arm-aes', 'arm-sha1', 'arm-sha2'
+ and 'arm-pmull'.
+
+2016-07-14 Werner Koch <wk@gnupg.org>
+
+ Release 1.7.2.
+ + commit be0bec7d9208b2f2d2ffce9cc2ca6154853e7e59
+ * configure.ac: Set LT version to C21/A1/R2.
+ * Makefile.am (distcheck-hook): New.
+
+2016-07-13 Werner Koch <wk@gnupg.org>
+
+ build: Update config.{guess,sub} to {2016-05-15,2016-06-20}.
+ + commit e535ea1bdc42309553007d60599d3147b8defe93
+ * build-aux/config.guess: Update.
+ * build-aux/config.sub: Update.
+
+2016-07-08 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix unaligned accesses with ldm/stm in ChaCha20 and Poly1305 ARM/NEON.
+ + commit 1111d311fd6452abd4080d1072c75ddb1b5a3dd1
+ * cipher/chacha20-armv7-neon.S (UNALIGNED_STMIA8)
+ (UNALIGNED_LDMIA4): New.
+ (_gcry_chacha20_armv7_neon_blocks): Use new helper macros instead of
+ ldm/stm instructions directly.
+ * cipher/poly1305-armv7-neon.S (UNALIGNED_LDMIA2)
+ (UNALIGNED_LDMIA4): New.
+ (_gcry_poly1305_armv7_neon_init_ext, _gcry_poly1305_armv7_neon_blocks)
+ (_gcry_poly1305_armv7_neon_finish_ext): Use new helper macros instead
+ of ldm instruction directly.
+
+2016-07-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ bench-slope: add unaligned buffer mode.
+ + commit 496790940753226f96b731a43d950bd268acd97a
+ * tests/bench-slope.c (unaligned_mode): New.
+ (do_slope_benchmark): Unalign buffer if in unaligned mode enabled.
+ (print_help, main): Add '--unaligned' parameter.
+
+2016-07-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix static build.
+ + commit cb79630ec567a5f2e03e5f863cda168faa7b8cc8
+ * tests/pubkey.c (_gcry_pk_util_get_nbits): Make function 'static'.
+
+2016-06-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Disallow encryption/decryption if key is not set.
+ + commit 07de9858032826f5a7b08c372f6bcc73bbb503eb
+ * cipher/cipher.c (cipher_encrypt, cipher_decrypt): If mode is not
+ NONE, make sure that key is set.
+ * cipher/cipher-ccm.c (_gcry_cipher_ccm_set_nonce): Do not clear
+ 'marks.key' when reseting state.
+
+ Avoid unaligned accesses with ARM ldm/stm instructions.
+ + commit a6158a01a4d81a5d862e1e0a60bfd6063443311d
+ * cipher/rijndael-arm.S: Remove __ARM_FEATURE_UNALIGNED ifdefs, always
+ compile with unaligned load/store code paths.
+ * cipher/sha512-arm.S: Ditto.
+
+ Fix non-PIC reference in PIC for poly1305/ARMv7-NEON.
+ + commit a09126242a51c4ea4564b0f70b808e4f27fe5a91
+ * cipher/poly1305-armv7-neon.S (GET_DATA_POINTER): New.
+ (_gcry_poly1305_armv7_neon_init_ext): Use GET_DATA_POINTER.
+
+ Fix wrong CPU feature #ifdef for SHA1/AVX.
+ + commit 4a983e3bef58b9d056517e25e0ab10b72d12ceba
+ * cipher/sha1-avx-amd64.S: Check for HAVE_GCC_INLINE_ASM_AVX instead of
+ HAVE_GCC_INLINE_ASM_AVX2 & HAVE_GCC_INLINE_ASM_BMI2.
+
+2016-06-30 Werner Koch <wk@gnupg.org>
+
+ random: Remove debug message about not supported getrandom syscall.
+ + commit 6965515c73632a088fb126a4a55e95121671fa98
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Remove log_debug
+ for getrandom error ENOSYS.
+
+2016-06-27 Werner Koch <wk@gnupg.org>
+
+ tests: Do not test SHAKE128 et al with gcry_md_hash_buffer.
+ + commit 4d634a098742ff425b324e9f2a67b9f62de09744
+ * tests/benchmark.c (md_bench): Do not test variable lengths algos
+ with the gcry_md_hash_buffer.
+
+ md: Improve diagnostic when using SHAKE128 with gcry_md_hash_buffer.
+ + commit ae26edf4b60359bfa5fe3a27b2c24b336e7ec35c
+ * cipher/md.c (md_read): Detect missing read function.
+ (_gcry_md_hash_buffers): Return an error.
+
+2016-06-25 Werner Koch <wk@gnupg.org>
+
+ ecc: Fix memory leak.
+ + commit 7a7f7c147f888367dfee6093d26bfeaf750efc3a
+ * cipher/ecc.c (ecc_check_secret_key): Do not init point if already
+ set.
+
+ doc: Update yat2m.
+ + commit 1feb01940062a74c27230434fc3babdddca8caf4
+ * doc/yat2m.c: Update from Libgpg-error
+
+ tests: Add attributes to helper functions.
+ + commit c870cb5d385c1d6e1e28ca481cf9cf44b3bfeea9
+ * tests/t-common.h (die, fail, info): Add attributes.
+ * tests/random.c (die, inf): Ditto.
+ * tests/pubkey.c (die, fail, info): Add attributes.
+ * tests/fipsdrv.c (die): Add attribute.
+ (main): Take care of missing --key,--iv,--dt options.
+
+ Improve robustness and help lint.
+ + commit 5a5b055b81ee60a22a846bdf2031516b1c24df98
+ * cipher/rsa.c (rsa_encrypt): Check for !DATA.
+ * cipher/md.c (search_oid): Check early for !OID.
+ (md_copy): Use gpg_err_code_from_syserror. Replace chains of if(!err)
+ tests.
+ * cipher/cipher.c (search_oid): Check early for !OID.
+ * src/misc.c (do_printhex): Allow for BUFFER==NULL even with LENGTH>0.
+ * mpi/mpicoder.c (onecompl): Allow for A==NULL to help static
+ analyzers.
+
+ cipher: Improve fatal error message for bad use of gcry_md_read.
+ + commit 3f98b1e92d5afd720d7cea5b4e8295c5018bf9ac
+ * cipher/md.c (md_read): Use _gcry_fatal_error instead of BUG.
+
+2016-06-16 Niibe Yutaka <gniibe@fsij.org>
+
+ ecc: Default cofactor 1 for PUBKEY_FLAG_PARAM.
+ + commit b0b70e7fe37b1bf13ec0bfc8effcb5c7f5db6b7d
+ * cipher/ecc.c (ecc_check_secret_key, ecc_sign, ecc_verify)
+ (ecc_encrypt_raw, ecc_decrypt_raw, compute_keygrip): Set default
+ cofactor as 1, when not specified.
+
+ ecc: Default cofactor 1 for PUBKEY_FLAG_PARAM.
+ + commit 0f3a069211d8d24a61aa0dc2cc6c4ef04cc4fab7
+ * cipher/ecc.c (ecc_check_secret_key, ecc_sign, ecc_verify)
+ (ecc_encrypt_raw, ecc_decrypt_raw, compute_keygrip): Set default
+ cofactor as 1, when not specified.
+
+2016-06-15 Werner Koch <wk@gnupg.org>
+
+ Release 1.7.1.
+ + commit 48aa6d6602564d6ba0cef10cf08f9fb0c59b3223
+
+
+ doc: Describe envvars.
+ + commit c3173bbe3f1a9c73f81a538dd49ccfa0447bfcdc
+ * doc/gcrypt.texi: Add chapter Configuration.
+
+ random: Change names of debug envvars.
+ + commit 131b4f0634cee0e5c47d2250c59f51127b10f7b3
+ * random/rndunix.c (start_gatherer): Change GNUPG_RNDUNIX_DBG to
+ GCRYPT_RNDUNIX_DBG, change GNUPG_RNDUNIX_DBG to GCRYPT_RNDUNIX_DBG.
+ * random/rndw32.c (registry_poll): Change GNUPG_RNDW32_NOPERF to
+ GCRYPT_RNDW32_NOPERF.
+
+2016-06-14 Werner Koch <wk@gnupg.org>
+
+ cipher: Assign OIDs to the Serpent cipher.
+ + commit e13a6a1ba53127af602713d0c2aaa85c94b3cd7e
+ * cipher/serpent.c (serpent128_oids, serpent192_oids)
+ (serpent256_oids): New. Add them to the specs blow.
+ (serpent128_aliases): Add "SERPENT-128".
+ (serpent256_aliases, serpent192_aliases): New.
+
+ cipher: Assign OIDs to the Serpent cipher.
+ + commit 6cc2100c00a65dff07b095dea7b32cb5c5cd96d4
+ * cipher/serpent.c (serpent128_oids, serpent192_oids)
+ (serpent256_oids): New. Add them to the specs blow.
+ (serpent128_aliases): Add "SERPENT-128".
+ (serpent256_aliases, serpent192_aliases): New.
+
+2016-06-08 Werner Koch <wk@gnupg.org>
+
+ rsa: Implement blinding also for signing.
+ + commit 1f769e3e8442bae2f1f73c656920bb2df70153c0
+ * cipher/rsa.c (rsa_decrypt): Factor blinding code out to ...
+ (secret_blinded): new.
+ (rsa_sign): Use blinding by default.
+
+ random: Remove debug output for getrandom(2) output.
+ + commit 52cdfb1960808aaad48b5a501bbce0e3141c3961
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Remove debug
+ output.
+
+ Fix gcc portability on Solaris 9 SPARC boxes.
+ + commit b766ea14ad1c27d6160531b200cc70aaa479c6dc
+ * mpi/longlong.h: Use __sparcv8 as alias for __sparc_v8__.
+
+2016-06-08 Jérémie Courrèges-Anglas <jca@wxcvbn.org>
+
+ Check for compiler SSE4.1 support in PCLMUL CRC code.
+ + commit dc76313308c184c92eb78452b503405b90fc7ebd
+ * cipher/crc-intel-pclmul.c: Build PCLMUL CRC implementation only if
+ compiler supports PCLMUL *and* SSE4.1
+ * cipher/crc.c: Ditto
+ * configure.ac (sse41support, gcry_cv_gcc_inline_asm_sse41): New.
+
+2016-06-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix ecc_verify for cofactor support.
+ + commit bd39eb9fba47dc8500c83769a679cc8b683d6c6e
+ * cipher/ecc.c (ecc_verify): Fix the argument for cofactor "h".
+
+2016-06-08 Werner Koch <wk@gnupg.org>
+
+ random: Try to use getrandom() instead of /dev/urandom (Linux only).
+ + commit c05837211e5221d3f56146865e823bc20b4ff1ab
+ * configure.ac: Check for syscall.
+ * random/rndlinux.c [HAVE_SYSCALL]: Include sys/syscall.h.
+ (_gcry_rndlinux_gather_random): Use getrandom is available.
+
+2016-06-03 Werner Koch <wk@gnupg.org>
+
+ rsa: Implement blinding also for signing.
+ + commit ef6e4d004b10f5740bcd2125fb70e199dd21e3e8
+ * cipher/rsa.c (rsa_decrypt): Factor blinding code out to ...
+ (secret_blinded): new.
+ (rsa_sign): Use blinding by default.
+
+ random: Remove debug output for getrandom(2) output.
+ + commit 82df6c63a72fdd969c3923523f10d0cef5713ac7
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Remove debug
+ output.
+
+2016-06-02 Werner Koch <wk@gnupg.org>
+
+ Fix gcc portability on Solaris 9 SPARC boxes.
+ + commit 4121f15122501d8946f1589b303d1f7949c15e30
+ * mpi/longlong.h: Use __sparcv8 as alias for __sparc_v8__.
+
+2016-05-28 Jérémie Courrèges-Anglas <jca@wxcvbn.org>
+
+ Check for compiler SSE4.1 support in PCLMUL CRC code.
+ + commit 3e8074ecd3a534e8bd7f11cf17f0b22d252584c8
+ * cipher/crc-intel-pclmul.c: Build PCLMUL CRC implementation only if
+ compiler supports PCLMUL *and* SSE4.1
+ * cipher/crc.c: Ditto
+ * configure.ac (sse41support, gcry_cv_gcc_inline_asm_sse41): New.
+
+2016-05-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix ecc_verify for cofactor support.
+ + commit c7430aa752232aa690c5d8f16575a345442ad8d7
+ * cipher/ecc.c (ecc_verify): Fix the argument for cofactor "h".
+
+2016-04-26 Werner Koch <wk@gnupg.org>
+
+ random: Try to use getrandom() instead of /dev/urandom (Linux only).
+ + commit ee5a32226a7ca4ab067864e06623fc11a1768900
+ * configure.ac: Check for syscall.
+ * random/rndlinux.c [HAVE_SYSCALL]: Include sys/syscall.h.
+ (_gcry_rndlinux_gather_random): Use getrandom is available.
+
+2016-04-19 Werner Koch <wk@gnupg.org>
+
+ asm fix for older gcc versions.
+ + commit caa9d14c914bf6116ec3f773a322a94e2be0c0fb
+ * cipher/crc-intel-pclmul.c: Remove extra trailing colon from
+ asm statements.
+
+ asm fix for older gcc versions.
+ + commit 4545372c0f8dd35aef2a7abc12b588ed1a4a0363
+ * cipher/crc-intel-pclmul.c: Remove extra trailing colon from
+ asm statements.
+
+2016-04-15 Werner Koch <wk@gnupg.org>
+
+ Release 1.7.0.
+ + commit 795f9cb090c776658a0e3117996e3fb7e2ebd94a
+
+
+2016-04-14 Werner Koch <wk@gnupg.org>
+
+ tests: Add test vectors for 256 GiB test of SHA3-256.
+ + commit 1737c546dc7268fa9edcd4a23b7439c56d37ee4f
+ * tests/hashtest.c: Add new test vectros.
+
+2016-04-14 Justus Winter <justus@g10code.com>
+
+ src: Improve S-expression parsing.
+ + commit 491586bc7f7b9edc6b78331a77e653543983c9e4
+ * src/sexp.c (do_vsexp_sscan): Return an error if a closing
+ parenthesis is encountered with no matching opening parenthesis.
+
+2016-04-14 Werner Koch <wk@gnupg.org>
+
+ cipher: Add constant for 8 bit CFB mode.
+ + commit 47c6a1f88eb763e9baa394e34d873b761abcebbe
+ * src/gcrypt.h.in (GCRY_CIPHER_MODE_CFB8): New.
+ * tests/basic.c (check_cfb_cipher): Prepare for CFB-8 tests.
+
+ tests: Add a new test for S-expressions.
+ + commit 88c6b98350193abbdcfb227754979b0c097ee09c
+ * tests/t-sexp.c (compare_to_canon): New.
+ (back_and_forth_one): Add another test.
+
+2016-04-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix corner cases for X25519.
+ + commit 8472b71812e71c69d66e2fcc02a6e21b66755f8b
+ * cipher/ecc.c (ecc_encrypt_raw): For invalid input, returns
+ GPG_ERR_INV_DATA instead of aborting with log_fatal. For X25519,
+ it's not an error, thus, let it return 0.
+ (ecc_decrypt_raw): Use the flag PUBKEY_FLAG_DJB_TWEAK to distinguish
+ X25519, not by the name of the curve.
+ (ecc_decrypt_raw): For invalid input, returns GPG_ERR_INV_DATA instead
+ of aborting with log_fatal. For X25519, it's not an error by its
+ definition, but we deliberately let it return the error to detect
+ looks-like-encrypted-message.
+ * tests/t-cv25519.c: Add points to record the issue.
+
+2016-04-12 Werner Koch <wk@gnupg.org>
+
+ cipher: Buffer data from gcry_cipher_authenticate in OCB mode.
+ + commit b6d2a25a275a35ec4dbd53ecaa9ea0ed7aa99c7b
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add fields
+ aad_leftover and aad_nleftover to u_mode.ocb.
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_set_nonce): Clear
+ aad_nleftover.
+ (_gcry_cipher_ocb_authenticate): Add buffering and facor some code out
+ to ...
+ (ocb_aad_finalize): new.
+ (compute_tag_if_needed): Call new function.
+ * tests/basic.c (check_ocb_cipher_splitaad): New.
+ (check_ocb_cipher): Call new function.
+ (main): Also call check_cipher_modes with --ciper-modes.
+
+2016-04-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix X25519 computation on Curve25519.
+ + commit ee7e1a0e835f8ffcfbcba2a44abab8632db8fed5
+ * cipher/ecc.c (ecc_encrypt_raw): Tweak of bits when
+ PUBKEY_FLAG_DJB_TWEAK is enabled.
+ (ecc_decrypt_raw): Return 0 when PUBKEY_FLAG_DJB_TWEAK is enabled.
+ * tests/t-cv25519.c (test_cv): Update by using gcry_pk_encrypt.
+
+ ecc: Fix initialization of EC context.
+ + commit 7fbdb99b8c56360adfd1fb4e7f4c95e0f8aa34de
+ * cipher/ecc.c (test_ecdh_only_keys, ecc_generate)
+ (ecc_check_secret_key, ecc_encrypt_raw, ecc_decrypt_raw): Initialize
+ by _gcry_mpi_ec_p_internal_new should carry FLAGS.
+
+2016-04-06 Werner Koch <wk@gnupg.org>
+
+ Allow building with configure option --enable-hmac-binary-check.
+ + commit 65c63144b66392f40b991684789b8b793248e3ba
+ * src/Makefile.am (mpicalc_LDADD): Add DL_LIBS.
+ * src/fips.c (check_binary_integrity): Allow use of hmac256 output.
+ * src/hmac256.c (main): Add option --stdkey
+
+2016-04-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Positive values in computation.
+ + commit 6f386ceae86a058e26294f744750f1ed2a95e604
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Make sure
+ coefficients A and B are positive.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_recover_x): For negation, do
+ "P - T" instead of "-T", so that the result will be positive.
+ (_gcry_ecc_eddsa_verify): Likewise.
+ * cipher/ecc.c (ecc_check_secret_key): Use _gcry_ecc_fill_in_curve
+ instead of _gcry_ecc_update_curve_param.
+ * mpi/ec.c (ec_subm): Make sure the result will be positive.
+ (dup_point_edwards, sub_points_edwards, _gcry_mpi_ec_curve_point): Use
+ mpi_sub instead of mpi_neg.
+ (add_points_edwards): Simply use ec_addm.
+ * tests/t-mpi-point.c (test_curve): Define curves with positive
+ coefficients.
+
+2016-04-01 Werner Koch <wk@gnupg.org>
+
+ mpi: Explicitly limit the allowed input length for gcry_mpi_scan.
+ + commit 862cf19a119427dd7ee7959a36c72d905f5ea5ca
+ * mpi/mpicoder.c (MAX_EXTERN_SCAN_BYTES): New.
+ (mpi_fromstr): Check against this limit.
+ (_gcry_mpi_scan): Ditto.
+ * tests/mpitests.c (test_maxsize): New.
+ (main): Cal that test.
+
+2016-03-31 Werner Koch <wk@gnupg.org>
+
+ cipher: Remove specialized rmd160 functions.
+ + commit fcce0cb6e8af70b134c6ecc3f56afa07a7d31f27
+ * cipher/rmd160.c: Replace rmd.h by hash-common.h.
+ (RMD160_CONTEXT): Move from rmd.h to here.
+ (_gcry_rmd160_init): Remove.
+ (_gcry_rmd160_mixblock): Remove.
+ (_gcry_rmd160_hash_buffer): Use rmd160_init directly.
+ * cipher/md.c: Remove rmd.h which was not actually used.
+ * cipher/rmd.h: Remove.
+ * cipher/Makefile.am (libcipher_la_SOURCES): Remove rmd.h.
+ * configure.ac (USE_RMD160): Allow to build without RMD160.
+
+ random: Replace RMD160 by SHA-1 for mixing the CSPRNG pool.
+ + commit a9cbe2d1f6a517a831517da8bc1d29e3e0b2c0c0
+ * cipher/sha1.c (_gcry_sha1_mixblock_init): New.
+ (_gcry_sha1_mixblock): New.
+ * random/random-csprng.c: Include sha1.h instead of rmd.h.
+ (mix_pool): Use SHA-1 instead of RIPE-MD-160 for mixing.
+
+ cipher: Move sha1 context definition to a separate file.
+ + commit 142a479a484cb4e84d0561be9b05b44dac9e6fe2
+ * cipher/sha1.c: Replace hash-common.h by sha1.h.
+ (SHA1_CONTEXT): Move to ...
+ * cipher/sha1.h: new. Always include all flags.
+ * cipher/Makefile.am (libcipher_la_SOURCES): Add sha1.h.
+
+2016-03-29 Werner Koch <wk@gnupg.org>
+
+ tests: Fix buffer overflow in bench-slope.
+ + commit 48ee918400762281bec5b6fc218a9f0d119aac7c
+ * tests/bench-slope.c (bench_print_result_std): Remove wrong use of
+ strncat.
+
+2016-03-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cipher: GCM: check that length of supplied tag is one of valid lengths.
+ + commit f2260e3a2e962ac80124ef938e54041bbea08561
+ * cipher/cipher-gcm.c (is_tag_length_valid): New.
+ (_gcry_cipher_gcm_tag): Check that 'outbuflen' has valid tag length.
+ * tests/basic.c (_check_gcm_cipher): Add test-vectors with different
+ valid tag lengths and negative test vectors with invalid lengths.
+
+2016-03-24 Peter Wu <peter@lekensteyn.nl>
+
+ cipher: Fix memleaks in (self)tests.
+ + commit 4a064e2a06fe737f344d1dfd8a45cc4c2abbe4c9
+ * cipher/dsa.c: Release memory for MPI and sexp structures.
+ * cipher/ecc.c: Release memory for sexp structure.
+ * tests/keygen.c: Likewise.
+
+ Mark constant MPIs as non-leaked.
+ + commit 470a30db241a2d567739ef2adb2a2ee64992d8b4
+ * mpi/mpiutil.c: Mark "constant" MPIs as explicitly leaked.
+
+2016-03-23 Werner Koch <wk@gnupg.org>
+
+ Add new control GCRYCTL_GET_TAGLEN for use with gcry_cipher_info.
+ + commit fea5971488e049f902d7912df22a945bc755ad6d
+ * src/gcrypt.h.in (GCRYCTL_GET_TAGLEN): New.
+ * cipher/cipher.c (_gcry_cipher_info): Add GCRYCTL_GET_TAGLEN feature.
+
+ * tests/basic.c (_check_gcm_cipher): Check that new feature.
+ (_check_poly1305_cipher): Ditto.
+ (check_ccm_cipher): Ditto.
+ (do_check_ocb_cipher): Ditto.
+ (check_ctr_cipher): Add negative test for new feature.
+
+ cipher: Avoid NULL-segv in GCM mode if a key has not been set.
+ + commit e709d86fe596a4bcf235799468947c13ae657d78
+ * cipher/cipher-gcm.c (_gcry_cipher_gcm_encrypt): Check that GHASH_FN
+ has been initialized.
+ (_gcry_cipher_gcm_decrypt): Ditto.
+ (_gcry_cipher_gcm_authenticate): Ditto.
+ (_gcry_cipher_gcm_initiv): Ditto.
+ (_gcry_cipher_gcm_tag): Ditto.
+
+ cipher: Check length of supplied tag in _gcry_cipher_poly1305_check_tag.
+ + commit 7c9c82feecf94a455c66d9c38576f36c9c4b484c
+ * cipher/cipher-poly1305.c (_gcry_cipher_poly1305_tag): Check that the
+ provided tag length matches the actual tag length.
+
+2016-03-23 Peter Wu <peter@lekensteyn.nl>
+
+ Fix buffer overrun in gettag for Poly1305.
+ + commit 6821e1bd94969106a70e3de17b86f6e6181f4e59
+ * cipher/cipher-poly1305.c: copy a fixed length instead of the
+ user-supplied number.
+
+2016-03-23 Werner Koch <wk@gnupg.org>
+
+ cipher: Check length of supplied tag in _gcry_cipher_gcm_check_tag.
+ + commit 15785bc9fb1787554bf371945ecb191830c15bfd
+ * cipher/cipher-gcm.c (_gcry_cipher_gcm_tag): Check that the provided
+ tag length matches the actual tag length. Avoid gratuitous return
+ statements.
+
+2016-03-23 Peter Wu <peter@lekensteyn.nl>
+
+ Fix buffer overrun in gettag for GCM.
+ + commit d3d7bdf8215275b3b20690dfde3f43dbe25b6f85
+ * cipher/cipher-gcm.c: copy a fixed length instead of the user-supplied
+ number.
+
+2016-03-22 Werner Koch <wk@gnupg.org>
+
+ tests: Add options --fips to keygen for manual tests.
+ + commit d328095dd4de83b839d9d8c4bdbeec0956971016
+ (main): Add option --fips.
+ * tests/keygen.c (check_rsa_keys): Create an 2048 bit key with e=65539
+ because that is valid in FIPS mode. Check that key generation fails
+ for too short keys in FIPS mode.
+ (check_ecc_keys): Check that key generation fails for Ed25519 keys in
+ FIPS mode.
+
+2016-03-22 Tomáš Mráz <tmraz@redhat.com>
+
+ rsa: Add FIPS 186-4 compliant RSA probable prime key generator.
+ + commit 5f9b3c2e220ca6d0eaff32324a973ef67933a844
+ * cipher/primegen.c (_gcry_fips186_4_prime_check): New.
+ * cipher/rsa.c (generate_fips): New.
+ (rsa_generate): Use new function in fips mode or with test-parms.
+
+ * tests/keygen.c (check_rsa_keys): Add test using e=65539.
+
+2016-03-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix ARM NEON support detection on ARMv6 target.
+ + commit 583919d70763671ed9feeaa14e1f66379aff88cc
+ * configure.ac (gcry_cv_gcc_inline_asm_neon): Use '.arm' directive
+ instead of '.thumb'.
+
+2016-03-18 Werner Koch <wk@gnupg.org>
+
+ Always require a 64 bit integer type.
+ + commit 897ccd21b7221982806b5c024518f4e989152f14
+ * configure.ac (available_digests_64): Merge with available_digests.
+ (available_kdfs_64): Merge with available_kdfs.
+ <64 bit datatype test>: Bail out if no such type is available.
+ * src/types.h: Emit #error if no u64 can be defined.
+ (PROPERLY_ALIGNED_TYPE): Always add u64 type.
+ * cipher/bithelp.h: Remove all code paths which handle the
+ case of !HAVE_U64_TYPEDEF.
+ * cipher/bufhelp.h: Ditto.
+ * cipher/cipher-ccm.c: Ditto.
+ * cipher/cipher-gcm.c: Ditto.
+ * cipher/cipher-internal.h: Ditto.
+ * cipher/cipher.c: Ditto.
+ * cipher/hash-common.h: Ditto.
+ * cipher/md.c: Ditto.
+ * cipher/poly1305.c: Ditto.
+ * cipher/scrypt.c: Ditto.
+ * cipher/tiger.c: Ditto.
+ * src/g10lib.h: Ditto.
+ * tests/basic.c: Ditto.
+ * tests/bench-slope.c: Ditto.
+ * tests/benchmark.c: Ditto.
+
+2016-03-18 Vitezslav Cizek <vcizek@suse.com>
+
+ tests: Fix testsuite after the FIPS adjustments.
+ + commit 9ecc2690181ba0bb44f66451a7dce2fc19965793
+ * tests/benchmark.c (ecc_bench): Avoid not approved curves in FIPS.
+ * tests/curves.c (check_get_params): Skip Brainpool curves in FIPS.
+ * tests/keygen.c (check_dsa_keys): Generate 2048 and 3072 bits keys.
+ (check_ecc_keys): Skip Ed25519 in FIPS mode.
+ * tests/random.c (main): Don't switch DRBG in FIPS mode.
+ * tests/t-ed25519.c (main): Ed25519 isn't supported in FIPS mode.
+ * tests/t-kdf.c (check_openpgp): Skip vectors using md5 in FIPS.
+ * tests/t-mpi-point.c (context_param): Skip P-192 and Ed25519 in FIPS.
+ (main): Skip math tests that use P-192 and Ed25519 in FIPS.
+
+ tests: Add new --pss option to fipsdrv.
+ + commit 1a02d741cacc3b57fe3d6ffebd794d53a60c9e97
+ * tests/fipsdrv.c (run_rsa_sign, run_rsa_verify): Set salt-length
+ to 0 for PSS.
+
+ cipher: Add option to specify salt length for PSS verification.
+ + commit 0bd8137e68c201b6c2290710e348aaf57efa2b2e
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi): Check for
+ salt-length token.
+
+ tests: Add support for RSA keygen tests to fipsdrv.
+ + commit 2e139456369a834cf87d983da4f61241fda76efe
+ * tests/fipsdrv.c (run_rsa_keygen): New.
+ (main): Support RSA keygen and RSA keygen KAT tests.
+
+ tests: Fixes for RSA testsuite in FIPS mode.
+ + commit c690230af5a66b809f8f6fbab1a6262a5ba078cb
+ * tests/basic.c (get_keys_new): Generate 2048 bit key.
+ * tests/benchmark.c (rsa_bench): Skip keys of lengths different
+ than 2048 and 3072 in FIPS mode.
+ * tests/keygen.c (check_rsa_keys): Failure if short keys can be
+ generated in FIPS mode.
+ (check_dsa_keys): Ditto for DSA keys.
+ * tests/pubkey.c (check_x931_derived_key): Skip keys < 2048 in FIPS.
+
+ rsa: Use 2048 bit RSA keys for selftest.
+ + commit 78cec8b4754fdf774edb2d575000cb3e972e244c
+ * cipher/rsa.c (selftests_rsa): Use 2048 bit keys.
+ (selftest_encr_1024): Replaced by selftest_encr_2048.
+ (selftest_sign_1024): Replaced by selftest_sign_2048.
+ (selftest_encr_2048): Add check against known ciphertext.
+ (selftest_sign_2048): Add check against known signature.
+ (selftest_sign_2048): Free SIG_MPI.
+ * tests/pubkey.c (get_keys_new): Generate 2048 bit keys.
+
+ Disable non-allowed algorithms in FIPS mode.
+ + commit ce1cbe16992a7340edcf8e6576973e3508267640
+ * cipher/cipher.c (_gcry_cipher_init),
+ * cipher/mac.c (_gcry_mac_init),
+ * cipher/md.c (_gcry_md_init),
+ * cipher/pubkey.c (_gcry_pk_init): In the FIPS mode, disable all the
+ non-allowed ciphers.
+ * cipher/md5.c: Mark MD5 as not allowed in FIPS.
+ * src/g10lib.h (_gcry_mac_init): New.
+ * src/global.c (global_init): Call the new _gcry_mac_init.
+ * tests/basic.c (check_ciphers): Fix a typo.
+
+2016-03-18 Werner Koch <wk@gnupg.org>
+
+ kdf: Make PBKDF2 check work on all platforms.
+ + commit c478cf175887c84dc071c4f73a7667603b354789
+ * cipher/kdf.c (_gcry_kdf_pkdf2): Chnage DKLEN to unsigned long.
+
+2016-03-18 Vitezslav Cizek <vcizek@suse.com>
+
+ kdf: Add upper bound for derived key length in PBKDF2.
+ + commit 0f741b0704bac5c0e2d2a0c2b34b44b35baa76d6
+ * cipher/kdf.c (_gcry_kdf_pkdf2): limit dkLen.
+
+ ecc: ECDSA adjustments for FIPS 186-4.
+ + commit a242e3d9185e6e2dc13902ea9331131755bbba01
+ * cipher/ecc-curves.c: Unmark curve P-192 for FIPS.
+ * cipher/ecc.c: Add ECDSA self test.
+ * cipher/pubkey-util.c (_gcry_pk_util_init_encoding_ctx): Use SHA-2
+ in FIPS mode.
+ * tests/fipsdrv.c: Add support for ECDSA signatures.
+
+2016-03-18 Werner Koch <wk@gnupg.org>
+
+ dsa: Make regression tests work.
+ + commit e40939b2141306238cc30a340b867b60fa4dc2a3
+ * cipher/dsa.c (sample_secret_key_1024): Comment out unused constant.
+ (ogenerate_fips186): Make it work with use-fips183-2 flag.
+ * cipher/primegen.c (_gcry_generate_fips186_3_prime): Use Emacs
+ standard comment out format.
+ * tests/fips186-dsa.c (check_dsa_gen_186_3): New dummy fucntion.
+ (main): Call it.
+ (main): Compare against current version.
+ * tests/pubkey.c (get_dsa_key_fips186_new): Create 2048 bit key.
+ (get_dsa_key_fips186_with_seed_new): Ditto.
+ (get_dsa_key_fips186_with_domain_new): Comment out.
+ (check_run): Do not call that function.
+
+2016-03-18 Vitezslav Cizek <vcizek@suse.com>
+
+ dsa: Adjustments to conform with FIPS 186-4.
+ + commit 80e9f95e6f419daa765e4876c858e3e36e808897
+ * cipher/dsa.c (generate_fips186): FIPS 186-4 adjustments.
+ * cipher/primegen.c (_gcry_generate_fips186_3_prime): Fix incorrect
+ buflen passed to _gcry_mpi_scan.
+
+2016-03-16 Justus Winter <justus@g10code.com>
+
+ Update documentation for 'gcry_sexp_extract_param'.
+ + commit 4051fe7fec6ffdc7a2f5c3856665478866991ee7
+ * doc/gcrypt.texi (gcry_sexp_extract_param): Mention that all MIPs
+ must be set to NULL first, and document how the function behaves in
+ case of errors.
+ * src/sexp.c (_gcry_sexp_extract_param): Likewise.
+ * src/gcrypt.h.in (gcry_sexp_extract_param): Copy the comment from
+ '_gcry_sexp_extract_param'.
+
+ cipher: Update comment.
+ + commit fcf4358a7a7ba8d32bf385ea99ced5f47cbd3ae2
+ * cipher/ecc.c (ecc_get_nbits): Update comment to reflect the fact
+ that a curve parameter can be given.
+
+2016-03-12 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add Intel PCLMUL implementations of CRC algorithms.
+ + commit 5d601dd57fcb41aa2015ab655fd6fc51537da667
+ * cipher/Makefile.am: Add 'crc-intel-pclmul.c'.
+ * cipher/crc-intel-pclmul.c: New.
+ * cipher/crc.c (USE_INTEL_PCLMUL): New macro.
+ (CRC_CONTEXT) [USE_INTEL_PCLMUL]: Add 'use_pclmul'.
+ [USE_INTEL_PCLMUL] (_gcry_crc32_intel_pclmul)
+ (gcry_crc24rfc2440_intel_pclmul): New.
+ (crc32_init, crc32rfc1510_init, crc24rfc2440_init)
+ [USE_INTEL_PCLMUL]: Select PCLMUL implementation if SSE4.1 and PCLMUL
+ HW features detected.
+ (crc32_write, crc24rfc2440_write) [USE_INTEL_PCLMUL]: Use PCLMUL
+ implementation if enabled.
+ (crc24_init): Document storage format of 24-bit CRC.
+ (crc24_next4): Use only 'data' for last table look-up.
+ * configure.ac: Add 'crc-intel-pclmul.lo'.
+ * src/g10lib.h (HWF_*, HWF_INTEL_SSE4_1): Update HWF flags to include
+ Intel SSE4.1.
+ * src/hwf-x86.c (detect_x86_gnuc): Add SSE4.1 detection.
+ * src/hwfeatures.c (hwflist): Add 'intel-sse4.1'.
+ * tests/basic.c (fillbuf_count): New.
+ (check_one_md): Add "?" check (million byte data-set with byte pattern
+ 0x00,0x01,0x02,...); Test all buffer sizes 1 to 1000, for "!" and "?"
+ checks.
+ (check_one_md_multi): Skip "?".
+ (check_digests): Add "?" test-vectors for MD5, SHA1, SHA224, SHA256,
+ SHA384, SHA512, SHA3_224, SHA3_256, SHA3_384, SHA3_512, RIPEMD160,
+ CRC32, CRC32_RFC1510, CRC24_RFC2440, TIGER1 and WHIRLPOOL; Add "!"
+ test-vectors for CRC32_RFC1510 and CRC24_RFC2440.
+
+2016-02-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Normalize EXPO for mpi_powm.
+ + commit fdfa5bfefdde316688a3c8021bd3528c5273b0f4
+ * mpi/mpi-pow.c (gcry_mpi_powm): Normalize EP.
+
+2016-02-22 Andreas Metzler <ametzler@bebt.de>
+
+ Do not ship generated header file in tarball.
+ + commit 2b40a16333fa75f1cee85ab901a5aa9cff845a92
+ * src/Makefile.am: Move gcrypt.h from include_HEADERS to
+ nodist_include_HEADERS to prevent inclusion in release tarball.
+ This could break out-of-tree-builds because the potentially outdated
+ src/gcrypt.h was not updated but was in the compiler search path.
+
+2016-02-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix building random-drbg for Win32/64.
+ + commit 531b25aa94c58f6d2168a9537c8cea6c53d7bbe0
+ * random/random-drbg.c: Remove include for sys/types.h and asm/types.h.
+ (DRBG_PREDICTION_RESIST, DRBG_CTRAES, DRBG_CTRSERPENT, DRBG_CTRTWOFISH)
+ (DRBG_HASHSHA1, DRBG_HASHSHA224, DRBG_HASHSHA256, DRBG_HASHSHA384)
+ (DRBG_HASHSHA512, DRBG_HMAC, DRBG_SYM128, DRBG_SYM192)
+ (DRBG_SYM256): Change 'u_int32_t' to 'u32'.
+ (drbg_get_entropy) [USE_RNDUNIX, USE_RNDW32]: Fix parameters
+ 'drbg_read_cb' and 'len'.
+
+2016-02-20 Werner Koch <wk@gnupg.org>
+
+ tests: Do not test DRBG_REINIT from "make check"
+ + commit 839d12c221430b60db5e0d6fbb107f22e0a6837f
+ * tests/random.c (main): Run check_drbg_reinit only if the envvar
+ GCRYPT_IN_REGRESSION_TEST is set.
+
+ doc: Fix possible dependency problem.
+ + commit 3b57e5a1ba68e26dcaea38b763287fddba9b6b7c
+ * doc/Makefile.am (gcrypt.texi): Use the right traget.
+
+2016-02-19 Stephan Mueller <smueller@chronox.de>
+
+ random: Remove ANSI X9.31 DRNG.
+ + commit e9b692d25d1c149b5417b70e18f2ce173bc25b6d
+ * random-fips.c: Remove.
+
+2016-02-19 Werner Koch <wk@gnupg.org>
+
+ random: Add a test case for DRBG_REINIT.
+ + commit 934ba2ae5a95a96fdbb3b935b51ba43df66f11df
+ * src/global.c (_gcry_vcontrol) <DRBG_REINIT>: Test for FIPS RNG.
+ * tests/random.c (check_drbg_reinit): New.
+ (main): Call new test.
+
+ random: Allow DRBG_REINIT before initialization.
+ + commit 7cdbd6e6a3cf1ee366b981e148d41b1187a6fdcf
+ * random/random-drbg.c (DRBG_DEFAULT_TYPE): New.
+ (_drbg_init_internal): Set the default type if no type has been set
+ before.
+ (_gcry_rngdrbg_inititialize): Pass 0 for flags to use the default.
+
+ Add new private header gcrypt-testapi.h.
+ + commit 744b030cff61fd25114b0b25394c62782c153343
+ * src/gcrypt-testapi.h: New.
+ * src/Makefile.am (libgcrypt_la_SOURCES): Add new file.
+ * random/random.h: Include gcrypt-testapi.h.
+ (struct gcry_drbg_test_vector) : Move to gcrypt-testapi.h.
+ * src/global.c: Include gcrypt-testapi.h.
+ (_gcry_vcontrol): Use PRIV_CTL_* constants instead of 58, 59, 60, 61.
+ * cipher/cipher.c: Include gcrypt-testapi.h.
+ (_gcry_cipher_ctl): Use PRIV_CIPHERCTL_ constants instead of 61, 62.
+ * tests/fipsdrv.c: Include gcrypt-testapi.h. Remove definition of
+ PRIV_CTL_ constants and replace their use by the new PRIV_CIPHERCTL_
+ constants.
+ * tests/t-lock.c: Include gcrypt-testapi.h. Remove
+ PRIV_CTL_EXTERNAL_LOCK_TEST and EXTERNAL_LOCK_TEST_ constants.
+
+ * random/random-drbg.c (gcry_rngdrbg_cavs_test): Rename to ...
+ (_gcry_rngdrbg_cavs_test): this.
+ (gcry_rngdrbg_healthcheck_one): Rename to ...
+ (_gcry_rngdrbg_healthcheck_one): this.
+
+ random: Make the DRBG C-90 clean and use a flag string.
+ + commit 95f1db3affb9f5b8a2c814c211d4a02b30446c15
+ * random/random.h (struct gcry_drbg_test_vector): Rename "flags" to
+ "flagstr" and turn it into a string.
+ * random/random-drbg.c (drbg_test_pr, drbg_test_nopr): Replace use of
+ designated initializers. Use a string for the flags.
+ (gcry_rngdrbg_cavs_test): Parse the flag string into a flag value.
+ (drbg_healthcheck_sanity): Ditto.
+
+ random: Symbol name cleanup for random-drbg.c.
+ + commit 85ed07790552297586258e8fe09b546eee357a8b
+ * random/random-drbg.c: Rename all static objects and macros from
+ "gcry_drbg" to "drbg".
+ (drbg_string_t): New typedef.
+ (drbg_gen_t): New typedef.
+ (drbg_state_t): New typedef. Replace all "struct drbg_state_s *" by
+ this.
+ (_drbg_init_internal): Replace xcalloc_secure by xtrycalloc_secure so
+ that an error if actually returned.
+ (gcry_rngdrbg_cavs_test): Ditto.
+ (gcry_drbg_healthcheck_sanity): Ditto.
+
+ random: Use our symbol name pattern also for drbg functions.
+ + commit 7cf3c929331133e4381dbceac53d3addd921c929
+ * random/random-drbg.c: Rename global functions from _gcry_drbg_*
+ to _gcry_rngdrbg_*.
+ * random/random.c: Adjust for this change.
+ * src/global.c: Ditto.
+
+ random: Rename drbg.c to random-drbg.c.
+ + commit e49b3f2c10e012509b5930c0df4d6df378d3b9f4
+ * random/drbg.c: Rename to ...
+ * random/random-drbg.c: this.
+ * random/Makefile.am (librandom_la_SOURCES): Adjust accordingly.
+
+ random: Remove the new API introduced by the new DRBG.
+ + commit dfac2b13d0068b2b1b420d77e9771a49964b81c1
+ * src/gcrypt.h.in (struct gcry_drbg_gen): Move to random/drbg.c.
+ (struct gcry_drbg_string): Ditto.
+ (gcry_drbg_string_fill): Ditto.
+ (gcry_randomize_drbg): Remove.
+ * random/drbg.c (parse_flag_string): New.
+ (_gcry_drbg_reinit): Change the way the arguments are passed.
+ * src/global.c (_gcry_vcontrol) <GCRYCTL_DRBG_REINIT>: Change calling
+ convention.
+
+ Add helper function _gcry_strtokenize.
+ + commit 4e134b6e77f558730ec1eceb6b816b0bcfd845e9
+ * src/misc.c (_gcry_strtokenize): New.
+
+2016-02-18 Werner Koch <wk@gnupg.org>
+
+ random: Remove DRBG constants from the public API.
+ + commit fd13372fa9069d3a72947ea59c57e33637c936bf
+ * src/gcrypt.h.in (GCRY_DRBG_): Remove all new flags to ...
+ * random/drbg.c: here.
+
+2016-02-18 Stephan Mueller <smueller@chronox.de>
+
+ random: Add SP800-90A DRBG.
+ + commit ed57fed6de1465e02ec5e3bc0affeabdd35e2eb7
+ * random/drbg.c: New.
+ * random/random.c (_gcry_random_initialize): Replace rngfips init by
+ drbg init.
+ (__gcry_random_close_fds): Likewise.
+ (_gcry_random_dump_stats): Likewise.
+ (_gcry_random_is_faked): Likewise.
+ (do_randomize): Likewise.
+ (_gcry_random_selftest): Likewise.
+ (_gcry_create_nonce): Replace rngfips_create_noce by drbg_randomize.
+ (_gcry_random_init_external_test): Remove.
+ (_gcry_random_run_external_test): Remove.
+ (_gcry_random_deinit_external_test): Remove.
+ * random/random.h (struct gcry_drbg_test_vector): New.
+ * src/gcrypt.h.in (struct gcry_drbg_gen): New.
+ (struct gcry_drbg_string): New.
+ (gcry_drbg_string_fill): New.
+ (gcry_randomize_drbg): New.
+ (GCRY_DRBG_): Lots of new macros.
+ * src/global.c (_gcry_vcontrol) <Init external random test>: Turn into
+ a nop.
+ (_gcry_vcontrol) <Deinit external random test>: Ditto.
+ (_gcry_vcontrol) <Run external random test>: Change.
+ (_gcry_vcontrol) <GCRYCTL_DRBG_REINIT>: New.
+
+2016-02-13 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ bufhelp: disable unaligned memory accesses on powerpc.
+ + commit 1da793d089b65ac8c1ead65dacb6b8699f5b6e69
+ * cipher/bufhelp.h (BUFHELP_FAST_UNALIGNED_ACCESS): Disable for
+ __powerpc__ and __powerpc64__.
+
+2016-02-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Not validate input point for Curve25519.
+ + commit 7a019bc7ecdbdfdef51094e090ce95e062da9b64
+ * cipher/ecc.c (ecc_decrypt_raw): Curve25519 is an exception.
+
+2016-02-10 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix memory leaks on error.
+ + commit b12dd550fd6af687ef95c584d0d8366c34965cc8
+ * cipher/ecc.c (ecc_decrypt_raw): Go to leave to release memory.
+ * mpi/ec.c (_gcry_mpi_ec_curve_point): Likewise.
+
+2016-02-09 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: input validation on ECDH.
+ + commit 23b72901f8a5ba9a78485b235c7a917fbc8faae0
+ * cipher/ecc.c (ecc_decrypt_raw): Validate the point.
+
+2016-02-08 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add ARM assembly implementation of SHA-512.
+ + commit 8353884bc65c820d5bcacaf1ac23cdee72091a09
+ * cipher/Makefile.am: Add 'sha512-arm.S'.
+ * cipher/sha512-arm.S: New.
+ * cipher/sha512.c (USE_ARM_ASM): New.
+ (_gcry_sha512_transform_arm): New.
+ (transform) [USE_ARM_ASM]: Use ARM assembly implementation instead of
+ generic.
+ * configure.ac: Add 'sha512-arm.lo'.
+
+2016-02-03 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: Add a test for Curve25519.
+ + commit b8b3361504950689ef1e779fb3357cecf8a9f739
+ * tests/Makefile.am (tests_bin): Add t-cv25519.
+ * tests/t-cv25519.c: New.
+
+2016-02-02 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix Curve25519 for data by older implementation.
+ + commit 6cb6df9dddac6ad246002b83c2ce0aaa0ecf30e5
+ * cipher/ecc-misc.c (gcry_ecc_mont_decodepoint): Fix code path for
+ short length data.
+
+ ecc: more fix of Curve25519.
+ + commit 48ba5a50066611ecacea850ced13f5cb66097a81
+ * cipher/ecc-misc.c (gcry_ecc_mont_decodepoint): Fix removing of
+ prefix. Clear the MSB, according to RFC7748.
+
+ ecc: Fix ECDH of Curve25519.
+ + commit a2f9afcd7fcdafd5951498b07f34957f9766dce9
+ * cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): Fix calc of NBITS
+ and prefix detection.
+ * cipher/ecc.c (ecc_generate): Use NBITS instead of CTX->NBITS.
+ (ecc_encrypt_raw): Use NBITS from curve instead of from P.
+ Fix rawmpilen calculation.
+ (ecc_decrypt_raw): Likewise. Add debug output.
+
+2016-01-29 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Improve performance of generic SHA256 implementation.
+ + commit f3e51161036382429c3491c7c881f36c0a653c7b
+ * cipher/sha256.c (R): Let caller do variable shuffling.
+ (Chro, Maj, Sum0, Sum1): Convert from inline functions to macros.
+ (W, I): New.
+ (transform_blk): Unroll round loop; inline message expansion to rounds
+ to make message expansion buffer smaller.
+
+2016-01-28 Werner Koch <wk@gnupg.org>
+
+ ecc: New API function gcry_mpi_ec_decode_point.
+ + commit 2cf2ca7bb9741ac86e8aa92d8f03b1c5f5938897
+ * mpi/ec.c (_gcry_mpi_ec_decode_point): New.
+ * cipher/ecc-common.h: Move two prototypes to ...
+ * src/ec-context.h: here.
+ * src/gcrypt.h.in (gcry_mpi_ec_decode_point): New.
+ * src/libgcrypt.def (gcry_mpi_ec_decode_point): New.
+ * src/libgcrypt.vers (gcry_mpi_ec_decode_point): New.
+ * src/visibility.c (gcry_mpi_ec_decode_point): New.
+ * src/visibility.h: Add new function.
+
+2016-01-15 Werner Koch <wk@gnupg.org>
+
+ Fix build problem for rndegd.c.
+ + commit 191c2e4fe2dc0e00f61aa44e011a9596887e6ce1
+ * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Test all RND modules.
+ * random/rndegd.c (_gcry_rndegd_connect_socket)
+ (my_make_filename): Use functions with '_' prefix.
+
+ random: Fix possible AIX problem with sysconf in rndunix.
+ + commit 6303b0e83856ee89374b447e710f0ab2af61caec
+ * random/rndunix.c [HAVE_STDINT_H]: Include stdint.h.
+ (start_gatherer): Detect misbehaving sysconf.
+
+2015-12-27 Werner Koch <wk@gnupg.org>
+
+ random: Take at max 25% from RDRAND.
+ + commit 5a78e7f15e0dd96a8bf64e2bb142880bf8ea6965
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Change use of
+ RDRAND from 50% to 25%.
+
+2015-12-07 Justus Winter <justus@g10code.com>
+
+ cipher: Improve error handling.
+ + commit b9c02fbeb7efb7d0593b33485fb30c298291cf80
+ * cipher/ecc.c (ecc_decrypt_raw): Improve error handling.
+
+ cipher: Initialize 'flags'.
+ + commit ca06cd7f77acb317c2649c58918908f043dfe6bd
+ * cipher/ecc.c (ecc_encrypt_raw): Initialize 'flags' to 0.
+
+2015-12-05 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: CHANGE point representation of Curve25519.
+ + commit dd3d06e7f113cf7608f060ceb043262efd0b0c9d
+ * cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): Decode point with
+ the prefix 0x40, additional 0x00 by MPI handling, and shorter octets
+ by MPI normalization.
+ * cipher/ecc.c (ecc_generate, ecc_encrypt_raw, ecc_decrypt_raw):
+ Always add the prefix 0x40.
+
+2015-12-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ chacha20: fix alignment of self-test context.
+ + commit 6fadbcd088e2af3e48407b95d8d0c2a8b7ad6c38
+ * cipher/chacha20.c (selftest): Ensure 16-byte alignment for chacha20
+ context structure.
+
+ salsa20: fix alignment of self-test context.
+ + commit 2cba0dbda462237f55438d4199eccd10c5e3f6ca
+ * cipher/salsa20.c (selftest): Ensure 16-byte alignment for salsa20
+ context structure.
+
+2015-12-02 Justus Winter <justus@g10code.com>
+
+ random: Drop fake entropy gathering function.
+ + commit d421ac283ec46d0ecaf6278ba4c24843f65fb2fa
+ * random/random-csprng.c (faked_rng): Drop variable.
+ (gather_faked): Drop prototype and function.
+ (initialize): Drop fallback code.
+ (_gcry_rngcsprng_is_faked): Change accordingly.
+
+ random: Fix selection of entropy gathering function.
+ + commit 468a5796ffb1a7776db4004d534376c1b981d740
+ * random/random-csprng.c (getfnc_gather_random): Do return NULL if no
+ usable entropy gathering function is found. The callsite then
+ installs the fake gather function.
+
+2015-11-26 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: minor improvement of point multiplication.
+ + commit 3658afd09c3b03b4398aaa5748387220c93b1a94
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Move ec_subm out of the loop.
+
+2015-11-25 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Constant-time multiplication for Weierstrass curve.
+ + commit 88e1358962e902ff1cbec8d53ba3eee46407851a
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Use simple left-to-right binary
+ method for Weierstrass curve when SCALAR is secure.
+
+ mpi: fix gcry_mpi_swap_cond.
+ + commit f88adee3e1f3e2de7d63f92f90bfb3078afd3b4f
+ * mpi/mpiutil.c (_gcry_mpi_swap_cond): Relax the condition.
+
+ mpi: Fix mpi_set_cond and mpi_swap_cond .
+ + commit 8ad682c412047d3b9196950709dbd7bd14ac8732
+ * mpi/mpiutil.c (_gcry_mpi_set_cond, _gcry_mpi_swap_cond): Don't use
+ the operator of !!, but assume SET/SWAP is 0 or 1.
+
+ ecc: multiplication of Edwards curve to be constant-time.
+ + commit 295b1c3540752af4fc5e6f41480e6db215222fba
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Use point_swap_cond.
+
+ ecc: Add point_resize and point_swap_cond.
+ + commit b6015176df6bfae107ac82f9baa29ef2c175c9f9
+ * mpi/ec.c (point_resize, point_swap_cond): New.
+ (_gcry_mpi_ec_mul_point): Use point_resize and point_swap_cond.
+
+2015-11-18 Justus Winter <justus@g10code.com>
+
+ cipher: Fix error handling.
+ + commit 940dc8adc034a6c6c38742f6bfd7d837a532d537
+ * cipher/cipher.c (_gcry_cipher_ctl): Fix error handling.
+
+2015-11-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Tweak Keccak for small speed-up.
+ + commit 6571a64331839d7d952292163afbf34c8bef62e0
+ * cipher/keccak_permute_32.h (KECCAK_F1600_PERMUTE_FUNC_NAME): Track
+ rounds with round constant pointer instead of separate round counter.
+ * cipher/keccak_permute_64.h (KECCAK_F1600_PERMUTE_FUNC_NAME): Ditto.
+ (KECCAK_F1600_ABSORB_FUNC_NAME): Tweak lanes pointer increment for bulk
+ absorb loops.
+
+ Update license information for CRC.
+ + commit 15ea0acf8bb0aa307eccc23024a0bd7878fb8080
+ * LICENSES: Remove 'Simple permissive' and 'IETF permissive' licenses
+ for 'cipher/crc.c' as result of rewrite of CRC implementations.
+
+2015-11-17 Justus Winter <justus@g10code.com>
+
+ Fix typos found using codespell.
+ + commit 0e395944b70c7a92a6437f6bcc14f287c19ce9de
+ * cipher/cipher-ocb.c: Fix typos.
+ * cipher/des.c: Likewise.
+ * cipher/dsa-common.c: Likewise.
+ * cipher/ecc.c: Likewise.
+ * cipher/pubkey.c: Likewise.
+ * cipher/rsa-common.c: Likewise.
+ * cipher/scrypt.c: Likewise.
+ * random/random-csprng.c: Likewise.
+ * random/random-fips.c: Likewise.
+ * random/rndw32.c: Likewise.
+ * src/cipher-proto.h: Likewise.
+ * src/context.c: Likewise.
+ * src/fips.c: Likewise.
+ * src/gcrypt.h.in: Likewise.
+ * src/global.c: Likewise.
+ * src/sexp.c: Likewise.
+ * tests/mpitests.c: Likewise.
+ * tests/t-lock.c: Likewise.
+
+2015-11-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Improve performance of Tiger hash algorithms.
+ + commit 89fa74d6b3e58cd4fcd6e0939a35e46cbaca2ea0
+ * cipher/tiger.c (tiger_round, pass, key_schedule): Convert functions
+ to macros.
+ (transform_blk): Pass variable names instead of pointers to 'pass'.
+
+ Add ARMv7/NEON implementation of Keccak.
+ + commit a1cc7bb15473a2419b24ecac765ae0ce5989a13b
+ * cipher/Makefile.am: Add 'keccak-armv7-neon.S'.
+ * cipher/keccak-armv7-neon.S: New.
+ * cipher/keccak.c (USE_64BIT_ARM_NEON): New.
+ (NEED_COMMON64): Select if USE_64BIT_ARM_NEON.
+ [NEED_COMMON64] (round_consts_64bit): Rename to...
+ [NEED_COMMON64] (_gcry_keccak_round_consts_64bit): ...this; Add
+ terminator at end.
+ [USE_64BIT_ARM_NEON] (_gcry_keccak_permute_armv7_neon)
+ (_gcry_keccak_absorb_lanes64_armv7_neon, keccak_permute64_armv7_neon)
+ (keccak_absorb_lanes64_armv7_neon, keccak_armv7_neon_64_ops): New.
+ (keccak_init) [USE_64BIT_ARM_NEON]: Select ARM/NEON implementation
+ if supported by HW.
+ * cipher/keccak_permute_64.h (KECCAK_F1600_PERMUTE_FUNC_NAME): Update
+ to use new round constant table.
+ * configure.ac: Add 'keccak-armv7-neon.lo'.
+
+ Optimize Keccak 64-bit absorb functions.
+ + commit 2857cb89c6dc1c02266600bc1fd2967a3cd5cf88
+ * cipher/keccak.c [USE_64BIT] [__x86_64__] (absorb_lanes64_8)
+ (absorb_lanes64_4, absorb_lanes64_2, absorb_lanes64_1): New.
+ * cipher/keccak.c [USE_64BIT] [!__x86_64__] (absorb_lanes64_8)
+ (absorb_lanes64_4, absorb_lanes64_2, absorb_lanes64_1): New.
+ [USE_64BIT] (KECCAK_F1600_ABSORB_FUNC_NAME): New.
+ [USE_64BIT] (keccak_absorb_lanes64): Remove.
+ [USE_64BIT_SHLD] (KECCAK_F1600_ABSORB_FUNC_NAME): New.
+ [USE_64BIT_SHLD] (keccak_absorb_lanes64_shld): Remove.
+ [USE_64BIT_BMI2] (KECCAK_F1600_ABSORB_FUNC_NAME): New.
+ [USE_64BIT_BMI2] (keccak_absorb_lanes64_bmi2): Remove.
+ * cipher/keccak_permute_64.h (KECCAK_F1600_ABSORB_FUNC_NAME): New.
+
+2015-10-31 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Enable CRC test vectors with zero bytes.
+ + commit 07e4839e75a7bca3a6c0a94aecfe75efe61d7ff2
+ * tests/basic.c (check_digests): Enable CRC test-vectors with zero
+ bytes.
+
+ Keccak: Add SHAKE Extendable-Output Functions.
+ + commit c0b9eee2d93a13930244f9ce0c14ed6b4aeb6c29
+ * src/hash-common.c (_gcry_hash_selftest_check_one): Add handling for
+ XOFs.
+ * src/keccak.c (keccak_ops_t): Rename 'extract_inplace' to 'extract'
+ and add 'pos' argument.
+ (KECCAK_CONTEXT): Add 'suffix'.
+ (keccak_extract_inplace64): Rename to...
+ (keccak_extract64): ...this; Add handling for 'pos' argument.
+ (keccak_extract_inplace32bi): Rename to...
+ (keccak_extract32bi): ...this; Add handling for 'pos' argument.
+ (keccak_extract_inplace64): Rename to...
+ (keccak_extract64): ...this; Add handling for 'pos' argument.
+ (keccak_extract_inplace32bi_bmi2): Rename to...
+ (keccak_extract32bi_bmi2): ...this; Add handling for 'pos' argument.
+ (keccak_init): Setup 'suffix'; add SHAKE128 & SHAKE256.
+ (shake128_init, shake256_init): New.
+ (keccak_final): Do not initial permute for SHAKE output; use correct
+ suffix for SHAKE.
+ (keccak_extract): New.
+ (keccak_selftests_keccak): Add SHAKE128 & SHAKE256 test-vectors.
+ (run_selftests): Add SHAKE128 & SHAKE256.
+ (shake128_asn, oid_spec_shake128, shake256_asn, oid_spec_shake256)
+ (_gcry_digest_spec_shake128, _gcry_digest_spec_shake256): New.
+ * cipher/md.c (digest_list): Add SHAKE128 & SHAKE256.
+ * doc/gcrypt.texi: Ditto.
+ * src/cipher.h (_gcry_digest_spec_shake128)
+ (_gcry_digest_spec_shake256): New.
+ * src/gcrypt.h.in (GCRY_MD_SHAKE128, GCRY_MD_SHAKE256): New.
+ * tests/basic.c (check_one_md): Add XOF check; Add 'elen' argument.
+ (check_one_md_multi): Skip if algo is XOF.
+ (check_digests): Add SHAKE128 & SHAKE256 test vectors.
+ * tests/bench-slope.c (kdf_bench_one): Skip XOFs.
+
+ Few updates to documentation.
+ + commit 28de6f9e16e386018e81a9cdaee596be7616ccab
+ * doc/gcrypt.text: Add mention of new 'intel-fast-shld' hw feature
+ flag; Add mention of x86 RDRAND support in rndhw.
+
+ Add HMAC-SHA3 test vectors.
+ + commit 92ad19873562cfce7bcc4a0b5aed8195d8284cfc
+ * tests/basic.c (check_mac): Add HMAC_SHA3 test vectors.
+
+2015-10-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ md: add variable length output interface.
+ + commit 577dc2b63ceca6a8a716256d034ea4e7414f65fa
+ * cipher/crc.c (_gcry_digest_spec_crc32)
+ (_gcry_digest_spec_crc32_rfc1510, _gcry_digest_spec_crc24_rfc2440): Set
+ 'extract' NULL.
+ * cipher/gostr3411-94.c (_gcry_digest_spec_gost3411_94)
+ (_gcry_digest_spec_gost3411_cp): Ditto.
+ * cipher/keccak.c (_gcry_digest_spec_sha3_224)
+ (_gcry_digest_spec_sha3_256, _gcry_digest_spec_sha3_384)
+ (_gcry_digest_spec_sha3_512): Ditto.
+ * cipher/md2.c (_gcry_digest_spec_md2): Ditto.
+ * cipher/md4.c (_gcry_digest_spec_md4): Ditto.
+ * cipher/md5.c (_gcry_digest_spec_md5): Ditto.
+ * cipher/rmd160.c (_gcry_digest_spec_rmd160): Ditto.
+ * cipher/sha1.c (_gcry_digest_spec_sha1): Ditto.
+ * cipher/sha256.c (_gcry_digest_spec_sha224)
+ (_gcry_digest_spec_sha256): Ditto.
+ * cipher/sha512.c (_gcry_digest_spec_sha384)
+ (_gcry_digest_spec_sha512): Ditto.
+ * cipher/stribog.c (_gcry_digest_spec_stribog_256)
+ (_gcry_digest_spec_stribog_512): Ditto.
+ * cipher/tiger.c (_gcry_digest_spec_tiger)
+ (_gcry_digest_spec_tiger1, _gcry_digest_spec_tiger2): Ditto.
+ * cipher/whirlpool.c (_gcry_digest_spec_whirlpool): Ditto.
+ * cipher/md.c (md_enable): Do not allow combination of HMAC and
+ 'expandable-output function'.
+ (md_final): Check if spec->read is NULL before calling.
+ (md_read): Ditto.
+ (md_extract, _gcry_md_extract): New.
+ * doc/gcrypt.texi: Add SHA3 algorithms and gcry_md_extract.
+ * src/cipher-proto.h (gcry_md_extract_t): New.
+ (gcry_md_spec_t): Add 'extract'.
+ * src/gcrypt-int.g (_gcry_md_extract): New.
+ * src/gcrypt.h.in (gcry_md_extract): New.
+ * src/libgcrypt.def: Add gcry_md_extract.
+ * src/libgcrypt.vers: Add gcry_md_extract.
+ * src/visibility.c (gcry_md_extract): New.
+ * src/visibility.h (gcry_md_extract): New.
+
+ md: check hmac flag in prepare_macpads.
+ + commit cee2e122ec6c1886957a8d47498eb63a6a921725
+ * cipher/md.c (prepare_macpads): Check hmac flag.
+
+ keccak: rewrite for improved performance.
+ + commit 74184c28fbe7ff58cf57f0094ef957d94045da7d
+ * cipher/Makefile.am: Add 'keccak_permute_32.h' and
+ 'keccak_permute_64.h'.
+ * cipher/hash-common.h [USE_SHA3] (MD_BLOCK_MAX_BLOCKSIZE): Remove.
+ * cipher/keccak.c (USE_64BIT, USE_32BIT, USE_64BIT_BMI2)
+ (USE_64BIT_SHLD, USE_32BIT_BMI2, NEED_COMMON64, NEED_COMMON32BI)
+ (keccak_ops_t): New.
+ (KECCAK_STATE): Add 'state64' and 'state32bi' members.
+ (KECCAK_CONTEXT): Remove 'bctx'; add 'blocksize', 'count' and 'ops'.
+ (rol64, keccak_f1600_state_permute): Remove.
+ [NEED_COMMON64] (round_consts_64bit, keccak_extract_inplace64): New.
+ [NEED_COMMON32BI] (round_consts_32bit, keccak_extract_inplace32bi)
+ (keccak_absorb_lane32bi): New.
+ [USE_64BIT] (ANDN64, ROL64, keccak_f1600_state_permute64)
+ (keccak_absorb_lanes64, keccak_generic64_ops): New.
+ [USE_64BIT_SHLD] (ANDN64, ROL64, keccak_f1600_state_permute64_shld)
+ (keccak_absorb_lanes64_shld, keccak_shld_64_ops): New.
+ [USE_64BIT_BMI2] (ANDN64, ROL64, keccak_f1600_state_permute64_bmi2)
+ (keccak_absorb_lanes64_bmi2, keccak_bmi2_64_ops): New.
+ [USE_32BIT] (ANDN64, ROL64, keccak_f1600_state_permute32bi)
+ (keccak_absorb_lanes32bi, keccak_generic32bi_ops): New.
+ [USE_32BIT_BMI2] (ANDN64, ROL64, keccak_f1600_state_permute32bi_bmi2)
+ (pext, pdep, keccak_absorb_lane32bi_bmi2, keccak_absorb_lanes32bi_bmi2)
+ (keccak_extract_inplace32bi_bmi2, keccak_bmi2_32bi_ops): New.
+ (keccak_write): New.
+ (keccak_init): Adjust to KECCAK_CONTEXT changes; add implementation
+ selection based on HWF features.
+ (keccak_final): Adjust to KECCAK_CONTEXT changes; use selected 'ops'
+ for state manipulation.
+ (keccak_read): Adjust to KECCAK_CONTEXT changes.
+ (_gcry_digest_spec_sha3_224, _gcry_digest_spec_sha3_256)
+ (_gcry_digest_spec_sha3_348, _gcry_digest_spec_sha3_512): Use
+ 'keccak_write' instead of '_gcry_md_block_write'.
+ * cipher/keccak_permute_32.h: New.
+ * cipher/keccak_permute_64.h: New.
+
+ hwf-x86: add detection for Intel CPUs with fast SHLD instruction.
+ + commit 909644ef5883927262366c356eed530e55aba478
+ * cipher/sha1.c (sha1_init): Use HWF_INTEL_FAST_SHLD instead of
+ HWF_INTEL_CPU.
+ * cipher/sha256.c (sha256_init, sha224_init): Ditto.
+ * cipher/sha512.c (sha512_init, sha384_init): Ditto.
+ * src/g10lib.h (HWF_INTEL_FAST_SHLD): New.
+ (HWF_INTEL_BMI2, HWF_INTEL_SSSE3, HWF_INTEL_PCLMUL, HWF_INTEL_AESNI)
+ (HWF_INTEL_RDRAND, HWF_INTEL_AVX, HWF_INTEL_AVX2)
+ (HWF_ARM_NEON): Update.
+ * src/hwf-x86.c (detect_x86_gnuc): Add detection of Intel Core
+ CPUs with fast SHLD/SHRD instruction.
+ * src/hwfeatures.c (hwflist): Add "intel-fast-shld".
+
+ Fix OCB amd64 assembly implementations for x32.
+ + commit 16fd540f4d01eb6dc23d9509ae549353617c7a67
+ * cipher/camellia-glue.c (_gcry_camellia_aesni_avx_ocb_enc)
+ (_gcry_camellia_aesni_avx_ocb_dec, _gcry_camellia_aesni_avx_ocb_auth)
+ (_gcry_camellia_aesni_avx2_ocb_enc, _gcry_camellia_aesni_avx2_ocb_dec)
+ (_gcry_camellia_aesni_avx2_ocb_auth, _gcry_camellia_ocb_crypt)
+ (_gcry_camellia_ocb_auth): Change 'Ls' from pointer array to u64 array.
+ * cipher/serpent.c (_gcry_serpent_sse2_ocb_enc)
+ (_gcry_serpent_sse2_ocb_dec, _gcry_serpent_sse2_ocb_auth)
+ (_gcry_serpent_avx2_ocb_enc, _gcry_serpent_avx2_ocb_dec)
+ (_gcry_serpent_ocb_crypt, _gcry_serpent_ocb_auth): Ditto.
+ * cipher/twofish.c (_gcry_twofish_amd64_ocb_enc)
+ (_gcry_twofish_amd64_ocb_dec, _gcry_twofish_amd64_ocb_auth)
+ (twofish_amd64_ocb_enc, twofish_amd64_ocb_dec, twofish_amd64_ocb_auth)
+ (_gcry_twofish_ocb_crypt, _gcry_twofish_ocb_auth): Ditto.
+
+ bench-slope: add KDF/PBKDF2 benchmark.
+ + commit ae40af427fd2a856b24ec2a41323ec8b80ffc9c0
+ * tests/bench-slope.c (bench_kdf_mode, bench_kdf_init, bench_kdf_free)
+ (bench_kdf_do_bench, kdf_ops, kdf_bench_one, kdf_bench): New.
+ (print_help): Add 'kdf'.
+ (main): Add KDF benchmarks.
+
+2015-10-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ md: keep contexts for HMAC in GcryDigestEntry.
+ + commit f7505b550dd591e33d3a3fab9277c43c460f1bad
+ * cipher/md.c (struct gcry_md_context): Add flags.hmac.
+ Remove macpads and mcpads_Bsize.
+ (md_open): Initialize flags.hmac. Remove macpads initialization.
+ (md_enable): Allocate contexts when flags.hmac is enabled.
+ (md_copy): Remove macpads copying. Add copying contexts.
+ (_gcry_md_reset): When flags.hmac is enabled, restore precomputed
+ context with input pad
+ (md_close): Remove macpads wiping.
+ (md_final): When flags.hmac is enabled, compute hmac by precomputed
+ context with output pad.
+ (prepare_macpads): Prepare precomputed contexts with input pad and
+ output pad for each registered digest entry.
+ (_gcry_md_setkey): Just call prepare_macpads.
+
+2015-10-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix double free on error.
+ + commit 1c6d2698a84e4bf82735287c1d64954bfc1a1982
+ * src/hmac256.c (_gcry_hmac256_finalize): Don't free HD.
+
+2015-10-14 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix gpg_error_t and gpg_err_code_t confusion.
+ + commit 813565a07ca575c87e1252c6ed26018653ecd338
+ * src/gcrypt-int.h (_gcry_sexp_extract_param): Revert the change.
+ * cipher/dsa.c (dsa_check_secret_key): Ditto.
+ * src/sexp.c (_gcry_sexp_extract_param): Return gpg_err_code_t.
+
+ * src/gcrypt-int.h (_gcry_err_make_from_errno)
+ (_gcry_error_from_errno): Return gpg_error_t.
+ * cipher/cipher.c (_gcry_cipher_open_internal)
+ (_gcry_cipher_ctl, _gcry_cipher_ctl): Don't use gcry_error.
+ * src/global.c (_gcry_vcontrol): Likewise.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Use
+ gpg_err_code_from_syserror.
+ * cipher/mac.c (mac_reset, mac_setkey, mac_setiv, mac_write)
+ (mac_read, mac_verify): Return gcry_err_code_t.
+ * cipher/rsa-common.c (mgf1): Use gcry_err_code_t for ERR.
+ * src/visibility.c (gcry_error_from_errno): Return gpg_error_t.
+
+2015-10-13 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix compiling AES/AES-NI implementation on linux-i386.
+ + commit fa94b6111948a614ebdcb67f7942eced8b84c579
+ * cipher/rijndael-aesni.c (do_aesni_ctr_4): Split assembly block in
+ two parts to reduce number of register constraints needed.
+
+2015-10-13 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix declaration of return type.
+ + commit 73374fdd27c7ba28b19f9672c68a6f5b72252fe5
+ * src/gcrypt-int.h (_gcry_sexp_extract_param): Return gpg_error_t.
+ * cipher/dsa.c (dsa_generate): Fix call to _gcry_sexp_extract_param.
+ * src/g10lib.h (_gcry_vcontrol): Return gcry_err_code_t.
+ * src/visibility.c (gcry_mpi_snatch): Fix call to _gcry_mpi_snatch.
+
+2015-09-07 Werner Koch <wk@gnupg.org>
+
+ Improve GCRYCTL_DISABLE_PRIV_DROP by also disabling cap_ calls.
+ + commit 3a3d5410cc83f7069c7cb1ab384905f382292d32
+ * src/secmem.c (lock_pool, secmem_init): Do not call any cap_
+ functions if NO_PRIV_DROP is set.
+
+2015-09-04 Werner Koch <wk@gnupg.org>
+
+ w32: Avoid a few compiler warnings.
+ + commit e97c62a4a687b56d00a2d0a63e072a977f8eb81c
+ * cipher/cipher-selftest.c (_gcry_selftest_helper_cbc)
+ (_gcry_selftest_helper_cfb, _gcry_selftest_helper_ctr): Mark variable
+ as unused.
+ * random/rndw32.c (slow_gatherer): Avoid signed pointer mismatch
+ warning.
+ * src/secmem.c (init_pool): Avoid unused variable warning.
+ * tests/random.c (writen, readn): Include on if needed.
+
+ w32: Fix alignment problem with AESNI on Windows >= 8.
+ + commit e2785a2268702312529521df3bd2f4e6b43cea3a
+ * cipher/cipher-selftest.c (_gcry_cipher_selftest_alloc_ctx): New.
+ * cipher/rijndael.c (selftest_basic_128, selftest_basic_192)
+ (selftest_basic_256): Allocate context on the heap.
+
+2015-08-31 Werner Koch <wk@gnupg.org>
+
+ rsa: Add verify after sign to avoid Lenstra's CRT attack.
+ + commit c17f84bd02d7ee93845e92e20f6ddba814961588
+ * cipher/rsa.c (rsa_sign): Check the CRT.
+
+ Add pubkey algo id for EdDSA.
+ + commit dd87639abd38afc91a6f27af33f0ba17402ad02d
+ * src/gcrypt.h.in (GCRY_PK_EDDSA): New.
+
+2015-08-25 Werner Koch <wk@gnupg.org>
+
+ Add configure option --enable-build-timestamp.
+ + commit a785cc3db0c4e8eb8ebbf784b833a40d2c42ec3e
+ * configure.ac (BUILD_TIMESTAMP): Set to "<none>" by default.
+
+2015-08-23 Werner Koch <wk@gnupg.org>
+
+ tests: Add missing files for the make distcheck target.
+ + commit fb3cb47b0a29d3e73150297aa4495c20915e4a75
+ * tests/Makefile.am (EXTRA_DIST): Add sha3-x test vector files.
+
+2015-08-19 Werner Koch <wk@gnupg.org>
+
+ Change SHA-3 algorithm ids.
+ + commit 65639ecaaeba642e40487446c40d045482001285
+ * src/gcrypt.h.in (GCRY_MD_SHA3_224, GCRY_MD_SHA3_256)
+ (GCRY_MD_SHA3_384, GCRY_MD_SHA3_512): Change values.
+
+2015-08-12 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Keccak: Fix array indexes in θ step.
+ + commit 48822ae0b436bcea0fe92dbf0d88475ba3179320
+ * cipher/keccak.c (keccak_f1600_state_permute): Fix indexes for D[5].
+
+ Simplify OCB offset calculation for parallel implementations.
+ + commit 24ebf53f1e8a8afa27dcd768339bda70a740bb03
+ * cipher/camellia-glue.c (_gcry_camellia_ocb_crypt)
+ (_gcry_camellia_ocb_auth): Precalculate Ls array always, instead of
+ just if 'blkn % <parallel blocks> == 0'.
+ * cipher/serpent.c (_gcry_serpent_ocb_crypt)
+ (_gcry_serpent_ocb_auth): Ditto.
+ * cipher/rijndael-aesni.c (get_l): Remove low-bit checks.
+ (aes_ocb_enc, aes_ocb_dec, _gcry_aes_aesni_ocb_auth): Handle leading
+ blocks until block counter is multiple of 4, so that parallel block
+ processing loop can use 'c->u_mode.ocb.L' array directly.
+ * tests/basic.c (check_ocb_cipher_largebuf): Rename to...
+ (check_ocb_cipher_largebuf_split): ...this and add option to process
+ large buffer as two split buffers.
+ (check_ocb_cipher_largebuf): New.
+
+ Add carryless 8-bit addition fast-path for AES-NI CTR mode.
+ + commit e11895da1f4af9782d89e92ba2e6b1a63235b54b
+ * cipher/rijndael-aesni.c (do_aesni_ctr_4): Do addition using
+ CTR in big-endian form, if least-significant byte does not overflow.
+
+2015-08-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add additional SHA3 test-vectors.
+ + commit 80321eb3a63a20f86734d6eebb3f419c0ec895aa
+ * tests/basic.c (check_digests): Allow datalen to be specified so that
+ input data can have byte with value 0x00; Include sha3-*.h header files
+ to test-vector structure.
+ * tests/sha3-224.h: New.
+ * tests/sha3-256.h: New.
+ * tests/sha3-384.h: New.
+ * tests/sha3-512.h: New.
+
+ Add generic SHA3 implementation.
+ + commit 434ba17d1d5ad59c70d721ad3ecb376c2403a7e5
+ * cipher/hash-common.h (MD_BLOCK_MAX_BLOCKSIZE): Increase blocksize
+ USE_SHA3 enabled.
+ * cipher/keccak.c (SHA3_DELIMITED_SUFFIX, SHAKE_DELIMITED_SUFFIX): New.
+ (KECCAK_STATE): Add proper state.
+ (KECCAK_CONTEXT): Add 'outlen'.
+ (rol64, keccak_f1600_state_permute, transform_blk, transform): New.
+ (keccak_init): Add proper initialization.
+ (keccak_final): Add proper finalization.
+ (selftests_keccak): Add selftests.
+ (oid_spec_sha3_224, oid_spec_sha3_256, oid_spec_sha3_384)
+ (oid_spec_sha3_512): Add OID.
+ (_gcry_digest_spec_sha3_224, _gcry_digest_spec_sha3_256)
+ (_gcry_digest_spec_sha3_384, _gcry_digest_spec_sha3_512): Fix output
+ length.
+ * cipher/mac-hmac.c (map_mac_algo_to_md): Fix mapping for SHA3-512.
+ (hmac_get_keylen): Return proper blocksizes for SHA3 algorithms.
+ [USE_SHA3] (_gcry_mac_type_spec_hmac_sha3_224)
+ (_gcry_mac_type_spec_hmac_sha3_256, _gcry_mac_type_spec_hmac_sha3_384)
+ (_gcry_mac_type_spec_hmac_sha3_512): New.
+ * cipher/mac-internal [USE_SHA3] (_gcry_mac_type_spec_hmac_sha3_224)
+ (_gcry_mac_type_spec_hmac_sha3_256, _gcry_mac_type_spec_hmac_sha3_384)
+ (_gcry_mac_type_spec_hmac_sha3_512): New.
+ * cipher/mac.c (mac_list) [USE_SHA3]: Add SHA3 algorithms.
+ * cipher/md.c (md_open): Use proper SHA-3 blocksizes for HMAC macpads.
+ * tests/basic.c (check_digests): Add SHA3 test vectors.
+
+ Optimize OCB offset calculation.
+ + commit 49f52c67fb42c0656c8f9af655087f444562ca82
+ * cipher/cipher-internal.h (ocb_get_l): New.
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_authenticate)
+ (ocb_crypt): Use 'ocb_get_l' instead of '_gcry_cipher_ocb_get_l'.
+ * cipher/camellia-glue.c (get_l): Remove.
+ (_gcry_camellia_ocb_crypt, _gcry_camellia_ocb_auth): Precalculate
+ offset array when block count matches parallel operation size; Use
+ 'ocb_get_l' instead of 'get_l'.
+ * cipher/rijndael-aesni.c (get_l): Add fast path for 75% most common
+ offsets.
+ (aesni_ocb_enc, aesni_ocb_dec, _gcry_aes_aesni_ocb_auth): Precalculate
+ offset array when block count matches parallel operation size.
+ * cipher/rijndael-ssse3-amd64.c (get_l): Add fast path for 75% most
+ common offsets.
+ * cipher/rijndael.c (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth): Use
+ 'ocb_get_l' instead of '_gcry_cipher_ocb_get_l'.
+ * cipher/serpent.c (get_l): Remove.
+ (_gcry_serpent_ocb_crypt, _gcry_serpent_ocb_auth): Precalculate
+ offset array when block count matches parallel operation size; Use
+ 'ocb_get_l' instead of 'get_l'.
+ * cipher/twofish.c (get_l): Remove.
+ (_gcry_twofish_ocb_crypt, _gcry_twofish_ocb_auth): Use 'ocb_get_l'
+ instead of 'get_l'.
+
+2015-08-10 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: fix Montgomery curve bugs.
+ + commit ce746936b6c210e602d106cfbf45cf60b408d871
+ * cipher/ecc.c (check_secret_key): Y1 should not be NULL when check.
+ (ecc_check_secret_key): Support Montgomery curve.
+ * mpi/ec.c (_gcry_mpi_ec_curve_point): Fix condition.
+
+2015-08-08 Werner Koch <wk@gnupg.org>
+
+ Add framework to eventually support SHA3.
+ + commit 0e17f7a05bba309a87811992aa47a77af9935b99
+ * src/gcrypt.h.in (GCRY_MD_SHA3_224, GCRY_MD_SHA3_256)
+ (GCRY_MD_SHA3_384, GCRY_MD_SHA3_512): New.
+ (GCRY_MAC_HMAC_SHA3_224, GCRY_MAC_HMAC_SHA3_256)
+ (GCRY_MAC_HMAC_SHA3_384, GCRY_MAC_HMAC_SHA3_512): New.
+ * cipher/keccak.c: New with stub functions.
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add keccak.c.
+ * configure.ac (available_digests): Add sha3.
+ (USE_SHA3): New.
+ * src/fips.c (run_hmac_selftests): Add SHA3 to the required selftests.
+ * cipher/md.c (digest_list) [USE_SHA3]: Add standard SHA3 algos.
+ (md_open): Ditto for hmac processing.
+ * cipher/mac-hmac.c (map_mac_algo_to_md): Add mapping.
+ * cipher/hmac-tests.c (run_selftests): Prepare for tests.
+ * cipher/pubkey-util.c (get_hash_algo): Add "sha3-xxx".
+
+2015-08-06 Werner Koch <wk@gnupg.org>
+
+ tools: Fix memory leak for functions "I" and "G".
+ + commit 10789e3cdda7b944acb4b59624c34a2ccfaea6e5
+ * src/mpicalc.c (do_inv, do_gcd): Init A after stack check.
+
+2015-08-06 Ismo Puustinen <ismo.puustinen@intel.com>
+
+ ecc: Free memory also when in error branch.
+ + commit 1d896371fbc94c605fce35eabcde01e24dd22892
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_sign): Init DISGEST and goto
+ leave on error.
+
+2015-08-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ Add Curve25519 support.
+ + commit e93f4c21c59756604440ad8cbf27e67d29c99ffd
+ * cipher/ecc-curves.c (curve_aliases, domain_parms): Add Curve25519.
+ * tests/curves.c (N_CURVES): It's 22 now.
+ * src/cipher.h (PUBKEY_FLAG_DJB_TWEAK): New.
+ * cipher/ecc-common.h (_gcry_ecc_mont_decodepoint): New.
+ * cipher/ecc-misc.c (_gcry_ecc_mont_decodepoint): New.
+ * cipher/ecc.c (nist_generate_key): Handle the case of
+ PUBKEY_FLAG_DJB_TWEAK and Montgomery curve.
+ (test_ecdh_only_keys, check_secret_key): Likewise.
+ (ecc_generate): Support Curve25519 which is Montgomery curve with flag
+ PUBKEY_FLAG_DJB_TWEAK and PUBKEY_FLAG_COMP.
+ (ecc_encrypt_raw): Get flags from KEYPARMS and handle
+ PUBKEY_FLAG_DJB_TWEAK and Montgomery curve.
+ (ecc_decrypt_raw): Likewise.
+ (compute_keygrip): Handle the case of PUBKEY_FLAG_DJB_TWEAK.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist):
+ PUBKEY_FLAG_EDDSA implies PUBKEY_FLAG_DJB_TWEAK.
+ Parse "djb-tweak" for PUBKEY_FLAG_DJB_TWEAK.
+
+2015-07-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Reduce code size for Twofish key-setup and remove key dependend branch.
+ + commit b4b1d872ba651bc44761b35d245b1a519a33f515
+ * cipher/twofish.c (poly_to_exp): Increase size by one, change type
+ from byte to u16 and insert '492' to index 0.
+ (exp_to_poly): Increase size by 256, let new cells have zero value.
+ (CALC_S): Execute unconditionally with help of modified tables.
+ (do_twofish_setkey): Change type for 'tmp' to 'unsigned int'; Un-unroll
+ CALC_K256 and CALC_K phases to reduce generated object size.
+
+ Reduce amount of duplicated code in OCB bulk implementations.
+ + commit e950052bc6f5ff11a7c23091ff3f6b5cc431e875
+ * cipher/cipher-ocb.c (_gcry_cipher_ocb_authenticate)
+ (ocb_crypt): Change bulk function to return number of unprocessed
+ blocks.
+ * src/cipher.h (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth)
+ (_gcry_camellia_ocb_crypt, _gcry_camellia_ocb_auth)
+ (_gcry_serpent_ocb_crypt, _gcry_serpent_ocb_auth)
+ (_gcry_twofish_ocb_crypt, _gcry_twofish_ocb_auth): Change return type
+ to 'size_t'.
+ * cipher/camellia-glue.c (get_l): Only if USE_AESNI_AVX or
+ USE_AESNI_AVX2 defined.
+ (_gcry_camellia_ocb_crypt, _gcry_camellia_ocb_auth): Change return type
+ to 'size_t' and return remaining blocks; Remove unaccelerated common
+ code path. Enable remaining common code only if USE_AESNI_AVX or
+ USE_AESNI_AVX2 defined; Remove unaccelerated common code.
+ * cipher/rijndael.c (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth): Change
+ return type to 'size_t' and return zero.
+ * cipher/serpent.c (get_l): Only if USE_SSE2, USE_AVX2 or USE_NEON
+ defined.
+ (_gcry_serpent_ocb_crypt, _gcry_serpent_ocb_auth): Change return type
+ to 'size_t' and return remaining blocks; Remove unaccelerated common
+ code path. Enable remaining common code only if USE_SSE2, USE_AVX2 or
+ USE_NEON defined; Remove unaccelerated common code.
+ * cipher/twofish.c (get_l): Only if USE_AMD64_ASM defined.
+ (_gcry_twofish_ocb_crypt, _gcry_twofish_ocb_auth): Change return type
+ to 'size_t' and return remaining blocks; Remove unaccelerated common
+ code path. Enable remaining common code only if USE_AMD64_ASM defined;
+ Remove unaccelerated common code.
+
+ Add bulk OCB for Serpent SSE2, AVX2 and NEON implementations.
+ + commit adbdca0d58f9c06dc3850b95e3455e179c1e6960
+ * cipher/cipher.c (_gcry_cipher_open_internal): Setup OCB bulk
+ functions for Serpent.
+ * cipher/serpent-armv7-neon.S: Add OCB assembly functions.
+ * cipher/serpent-avx2-amd64.S: Add OCB assembly functions.
+ * cipher/serpent-sse2-amd64.S: Add OCB assembly functions.
+ * cipher/serpent.c (_gcry_serpent_sse2_ocb_enc)
+ (_gcry_serpent_sse2_ocb_dec, _gcry_serpent_sse2_ocb_auth)
+ (_gcry_serpent_neon_ocb_enc, _gcry_serpent_neon_ocb_dec)
+ (_gcry_serpent_neon_ocb_auth, _gcry_serpent_avx2_ocb_enc)
+ (_gcry_serpent_avx2_ocb_dec, _gcry_serpent_avx2_ocb_auth): New
+ prototypes.
+ (get_l, _gcry_serpent_ocb_crypt, _gcry_serpent_ocb_auth): New.
+ * src/cipher.h (_gcry_serpent_ocb_crypt)
+ (_gcry_serpent_ocb_auth): New.
+ * tests/basic.c (check_ocb_cipher): Add test-vector for serpent.
+
+ Add bulk OCB for Twofish AMD64 implementation.
+ + commit 7f6804c37c4b41d85fb26aa723b1c41e4a3cf278
+ * cipher/cipher.c (_gcry_cipher_open_internal): Setup OCB bulk
+ functions for Twofish.
+ * cipher/twofish-amd64.S: Add OCB assembly functions.
+ * cipher/twofish.c (_gcry_twofish_amd64_ocb_enc)
+ (_gcry_twofish_amd64_ocb_dec, _gcry_twofish_amd64_ocb_auth): New
+ prototypes.
+ (call_sysv_fn5, call_sysv_fn6, twofish_amd64_ocb_enc)
+ (twofish_amd64_ocb_dec, twofish_amd64_ocb_auth, get_l)
+ (_gcry_twofish_ocb_crypt, _gcry_twofish_ocb_auth): New.
+ * src/cipher.h (_gcry_twofish_ocb_crypt)
+ (_gcry_twofish_ocb_auth): New.
+ * tests/basic.c (check_ocb_cipher): Add test-vector for Twofish.
+
+ Add bulk OCB for Camellia AES-NI/AVX and AES-NI/AVX2 implementations.
+ + commit bb088c6b1620504fdc79e89af27c2bf3fb02b4b4
+ * cipher/camellia-aesni-avx-amd64.S: Add OCB assembly functions.
+ * cipher/camellia-aesni-avx2-amd64.S: Add OCB assembly functions.
+ * cipher/camellia-glue.c (_gcry_camellia_aesni_avx_ocb_enc)
+ (_gcry_camellia_aesni_avx_ocb_dec, _gcry_camellia_aesni_avx_ocb_auth)
+ (_gcry_camellia_aesni_avx2_ocb_enc, _gcry_camellia_aesni_avx2_ocb_dec)
+ (_gcry_camellia_aesni_avx2_ocb_auth): New prototypes.
+ (get_l, _gcry_camellia_ocb_crypt, _gcry_camellia_ocb_auth): New.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Setup OCB bulk
+ functions for Camellia.
+ * src/cipher.h (_gcry_camellia_ocb_crypt)
+ (_gcry_camellia_ocb_auth): New.
+ * tests/basic.c (check_ocb_cipher): Add test-vector for Camellia.
+
+2015-07-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add OCB bulk mode for AES SSSE3 implementation.
+ + commit 620e1e0300c79943a1846a49563b04386dc60546
+ * cipher/rijndael-ssse3-amd64.c (SSSE3_STATE_SIZE): New.
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (vpaes_ssse3_prepare): Use
+ 'ssse3_state' for storing current SSSE3 state.
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]
+ (vpaes_ssse3_cleanup): Restore SSSE3 state from 'ssse3_state'.
+ (_gcry_aes_ssse3_do_setkey, _gcry_aes_ssse3_prepare_decryption)
+ (_gcry_aes_ssse3_encrypt, _gcry_aes_ssse3_cfb_enc)
+ (_gcry_aes_ssse3_cbc_enc, _gcry_aes_ssse3_ctr_enc)
+ (_gcry_aes_ssse3_decrypt, _gcry_aes_ssse3_cfb_dec)
+ (_gcry_aes_ssse3_cbc_dec, _gcry_aes_ssse3_cbc_dec): Add 'ssse3_state'
+ array.
+ (get_l, ssse3_ocb_enc, ssse3_ocb_dec, _gcry_aes_ssse3_ocb_crypt)
+ (_gcry_aes_ssse3_ocb_auth): New.
+ * cipher/rijndael.c (_gcry_aes_ssse3_ocb_crypt)
+ (_gcry_aes_ssse3_ocb_auth): New.
+ (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth) [USE_SSSE3]: Use SSSE3
+ implementation for OCB.
+
+2015-07-26 Peter Wu <peter@lekensteyn.nl>
+
+ Fix undefined behavior wrt memcpy.
+ + commit 46c072669eb81ed610cc5b3c0dc0c75a143afbb4
+ * cipher/cipher-gcm.c: Do not copy zero bytes from an empty buffer. Let
+ the function continue to add padding as needed though.
+ * cipher/mac-poly1305.c: If the caller requested to finish the hash
+ function without a copy of the result, return immediately.
+
+2015-07-23 Peter Wu <peter@lekensteyn.nl>
+
+ build: ignore scissor line for the commit-msg hook.
+ + commit ada0a7d302cca97b327faaacac7a5d0b8043df88
+ * build-aux/git-hooks/commit-msg: Stop processing more lines when the
+ scissor line is encountered.
+
+2015-07-16 Peter Wu <peter@lekensteyn.nl>
+
+ rsa: Fix error in comments.
+ + commit 9cd55e8e948f0049cb23495f536decf797d072f7
+ * cipher/rsa.c: Fix.
+
+2015-07-14 Peter Wu <peter@lekensteyn.nl>
+
+ sexp: Fix invalid deallocation in error path.
+ + commit 0f9532b186c1e0b54d7e7a6d76bce82b6226122b
+ * src/sexp.c: Fix wrong condition.
+
+2015-07-10 Peter Wu <peter@lekensteyn.nl>
+
+ ecc: fix memory leak.
+ + commit 2a7aa3ea4d03a9c808d5888f5509c08cd27aa27c
+ * cipher/ecc.c (ecc_verify): Release memory which was allocated before
+ by _gcry_pk_util_preparse_sigval.
+ (ecc_decrypt_raw): Likewise.
+
+2015-07-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: fix memory leaks.
+ + commit 0a7547e487a8bc4e7ac9599c55579eb2e4a13f06
+ cipher/ecc.c (ecc_generate): Fix memory leak on error of
+ _gcry_pk_util_parse_flaglist and _gcry_ecc_eddsa_encodepoint.
+ (ecc_check_secret_key): Fix memory leak on error of
+ _gcry_ecc_update_curve_param.
+ (ecc_sign, ecc_verify, ecc_encrypt_raw, ecc_decrypt_raw): Remove
+ unnecessary sexp_release and fix memory leak on error of
+ _gcry_ecc_fill_in_curve.
+ (ecc_decrypt_raw): Fix double free of the point kG and memory leak
+ on error of _gcry_ecc_os2ec.
+
+2015-06-11 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Support FreeBSD 10 or later.
+ + commit a36ee7501f68ad7ebcfe31f9659430b9d2c3ddd1
+ * mpi/config.links: Include FreeBSD 10 to 29.
+
+2015-05-21 Werner Koch <wk@gnupg.org>
+
+ ecc: Add key generation flag "no-keytest".
+ + commit 2bddd947fd1c11b4ec461576db65a5e34fea1b07
+ * src/cipher.h (PUBKEY_FLAG_NO_KEYTEST): New.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Add flag
+ "no-keytest". Return an error for invalid flags of length 10.
+
+ * cipher/ecc.c (nist_generate_key): Replace arg random_level by flags
+ set random level depending on flags.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Ditto.
+ * cipher/ecc.c (ecc_generate): Pass flags to generate fucntion and
+ remove var random_level.
+ (nist_generate_key): Implement "no-keytest" flag.
+
+ * tests/keygen.c (check_ecc_keys): Add tests for transient-key and
+ no-keytest.
+
+ ecc: Avoid double conversion to affine coordinates in keygen.
+ + commit 102d68b3bd77813a3ff989526855bb1e283bf9d7
+ * cipher/ecc.c (nist_generate_key): Add args r_x and r_y.
+ (ecc_generate): Rename vars. Convert to affine coordinates only if
+ not returned by the lower level generation function.
+
+ random: Change initial extra seeding from 2400 bits to 128 bits.
+ + commit 8124e357b732a719696bfd5271def4e528f2a1e1
+ * random/random-csprng.c (read_pool): Reduce initial seeding.
+
+2015-05-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Enable AMD64 Twofish implementation on WIN64.
+ + commit 9b0c6c8141ae9bd056392a3f6b5704b505fc8501
+ * cipher/twofish-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/twofish.c (USE_AMD64_ASM): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn): New.
+ (twofish_amd64_encrypt_block, twofish_amd64_decrypt_block)
+ (twofish_amd64_ctr_enc, twofish_amd64_cbc_dec)
+ (twofish_amd64_cfb_dec): New wrapper functions for AMD64
+ assembly functions.
+
+ Enable AMD64 Serpent implementations on WIN64.
+ + commit eb0ed576893b6c7990dbcb568510f831d246cea6
+ * cipher/serpent-avx2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/serpent-sse2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/chacha20.c (USE_SSE2, USE_AVX2): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [USE_SSE2 || USE_AVX2] (ASM_FUNC_ABI): New.
+ (_gcry_serpent_sse2_ctr_enc, _gcry_serpent_sse2_cbc_dec)
+ (_gcry_serpent_sse2_cfb_dec, _gcry_serpent_avx2_ctr_enc)
+ (_gcry_serpent_avx2_cbc_dec, _gcry_serpent_avx2_cfb_dec): Add
+ ASM_FUNC_ABI.
+
+ Enable AMD64 Salsa20 implementation on WIN64.
+ + commit 12bc93ca8187b8061c2e705427ef22f5a71d29b0
+ * cipher/salsa20-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/salsa20.c (USE_AMD64): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [USE_AMD64] (ASM_FUNC_ABI, ASM_EXTRA_STACK): New.
+ (_gcry_salsa20_amd64_keysetup, _gcry_salsa20_amd64_ivsetup)
+ (_gcry_salsa20_amd64_encrypt_blocks): Add ASM_FUNC_ABI.
+ [USE_AMD64] (salsa20_core): Add ASM_EXTRA_STACK.
+ (salsa20_do_encrypt_stream) [USE_AMD64]: Add ASM_EXTRA_STACK.
+
+ Enable AMD64 Poly1305 implementations on WIN64.
+ + commit 8d7de4dbf7732c6eb9e9853ad7c19c89075ace6f
+ * cipher/poly1305-avx2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/poly1305-sse2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/poly1305-internal.h (POLY1305_SYSV_FUNC_ABI): New.
+ (POLY1305_USE_SSE2, POLY1305_USE_AVX2): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (OPS_FUNC_ABI): New.
+ (poly1305_ops_t): Use OPS_FUNC_ABI.
+ * cipher/poly1305.c (_gcry_poly1305_amd64_sse2_init_ext)
+ (_gcry_poly1305_amd64_sse2_finish_ext)
+ (_gcry_poly1305_amd64_sse2_blocks, _gcry_poly1305_amd64_avx2_init_ext)
+ (_gcry_poly1305_amd64_avx2_finish_ext)
+ (_gcry_poly1305_amd64_avx2_blocks, _gcry_poly1305_armv7_neon_init_ext)
+ (_gcry_poly1305_armv7_neon_finish_ext)
+ (_gcry_poly1305_armv7_neon_blocks, poly1305_init_ext_ref32)
+ (poly1305_blocks_ref32, poly1305_finish_ext_ref32)
+ (poly1305_init_ext_ref8, poly1305_blocks_ref8)
+ (poly1305_finish_ext_ref8): Use OPS_FUNC_ABI.
+
+ Enable AMD64 3DES implementation on WIN64.
+ + commit b65e9e71d5ee992db5c96793c6af999545daad28
+ * cipher/des-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/des.c (USE_AMD64_ASM): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn): New.
+ (tripledes_ecb_crypt) [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]: Call
+ assembly function through 'call_sysv_fn'.
+ (tripledes_amd64_ctr_enc, tripledes_amd64_cbc_dec)
+ (tripledes_amd64_cfb_dec): New wrapper functions for bulk
+ assembly functions.
+
+ Enable AMD64 ChaCha20 implementations on WIN64.
+ + commit 9597cfddf03c467825da152be5ca0d12a8c30d88
+ * cipher/chacha20-avx2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/chacha20-sse2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/chacha20-ssse3-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/chacha20.c (USE_SSE2, USE_SSSE3, USE_AVX2): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ASM_FUNC_ABI, ASM_EXTRA_STACK): New.
+ (chacha20_blocks_t, _gcry_chacha20_amd64_sse2_blocks)
+ (_gcry_chacha20_amd64_ssse3_blocks, _gcry_chacha20_amd64_avx2_blocks)
+ (_gcry_chacha20_armv7_neon_blocks, chacha20_blocks): Add ASM_FUNC_ABI.
+ (chacha20_core): Add ASM_EXTRA_STACK.
+
+ Enable AMD64 CAST5 implementation on WIN64.
+ + commit 6a6646df80386204675d8b149ab60e74d7ca124c
+ * cipher/cast5-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (RIP): Remove.
+ (GET_EXTERN_POINTER): Use 'leaq' version on WIN64.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/cast5.c (USE_AMD64_ASM): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn): New.
+ (do_encrypt_block, do_decrypt_block)
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]: Call assembly
+ function through 'call_sysv_fn'.
+ (cast5_amd64_ctr_enc, cast5_amd64_cbc_dec)
+ (cast5_amd64_cfb_dec): New wrapper functions for bulk
+ assembly functions.
+
+ Enable AMD64 Camellia implementations on WIN64.
+ + commit 9a4fb3709864bf3e3918800d44ff576590cd4e92
+ * cipher/camellia-aesni-avx-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/camellia-aesni-avx2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/camellia-glue.c (USE_AESNI_AVX, USE_AESNI_AVX2): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [USE_AESNI_AVX || USE_AESNI_AVX2] (ASM_FUNC_ABI, ASM_EXTRA_STACK): New.
+ (_gcry_camellia_aesni_avx_ctr_enc, _gcry_camellia_aesni_avx_cbc_dec)
+ (_gcry_camellia_aesni_avx_cfb_dec, _gcry_camellia_aesni_avx_keygen)
+ (_gcry_camellia_aesni_avx2_ctr_enc, _gcry_camellia_aesni_avx2_cbc_dec)
+ (_gcry_camellia_aesni_avx2_cfb_dec): Add ASM_FUNC_ABI.
+
+ Enable AMD64 Blowfish implementation on WIN64.
+ + commit e05682093ffb003b589a697428d918d755ac631d
+ * cipher/blowfish-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/blowfish.c (USE_AMD64_ASM): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (call_sysv_fn): New.
+ (do_encrypt, do_encrypt_block, do_decrypt_block)
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]: Call assembly
+ function through 'call_sysv_fn'.
+ (blowfish_amd64_ctr_enc, blowfish_amd64_cbc_dec)
+ (blowfish_amd64_cfb_dec): New wrapper functions for bulk
+ assembly functions.
+ ..
+
+ Enable AMD64 arcfour implementation on WIN64.
+ + commit c46b015bedba7ce0db68929bd33a86a54ab3d919
+ * cipher/arcfour-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/arcfour.c (USE_AMD64_ASM): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (do_encrypt, do_decrypt) [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]: Use
+ assembly block to call AMD64 assembly function.
+
+ Update documentation for Poly1305-ChaCha20 AEAD, RFC-7539.
+ + commit ee8fc4edcb3466b03246c8720b90731bf274ff1d
+ * cipher/cipher-poly1305.c: Add RFC-7539 to header.
+ * doc/gcrypt.texi: Update Poly1305 AEAD documentation with mention of
+ RFC-7539; Drop Salsa from supported stream ciphers for Poly1305 AEAD.
+
+ hwf-x86: use edi for passing value to ebx for i386 cpuid.
+ + commit bac42c68b069f17abcca810a21439c7233815747
+ * src/hwf-x86.c [__i386__] (get_cpuid): Use '=D' for regs[1] instead
+ of '=r'.
+
+ hwf-x86: add EDX as output register for xgetbv asm block.
+ + commit e15beb584a5ebdfc363e1ff15f87102508652d71
+ * src/hwf-x86.c (get_xgetbv): Add EDX as output.
+
+2015-05-04 Werner Koch <wk@gnupg.org>
+
+ build: Update build-aux files.
+ + commit 5a7d55eed3316f40ca61acbee032bfc285e28803
+
+
+ Fix possible regression on old 32 bit mingw compilers.
+ + commit 090ca7435156b5f52064357dd59059570d466f46
+ * acinclude.m4: Add new pattern for mingw32.
+
+ build: Add new file.
+ + commit 4af52b2e72ce004b7d8f99e09c4324e3c2a84379
+ * mpi/amd64/distfiles: Add func_abi.h.
+
+2015-05-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix WIN64 assembly glue for AES.
+ + commit 24a769a7c7601dbb85332e550f6fbd121b56df5f
+ * cipher/rinjdael.c (do_encrypt, do_decrypt)
+ [!HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS]: Change input operands to
+ input+output to mark volatile nature of the used registers.
+
+ Add '1 million a characters' test vectors.
+ + commit 2f4fefdbc62857b6e2da26ce111ee140a068c471
+ * tests/basic.c (check_digests): Add "!" test vectors for MD5, SHA-384,
+ SHA-512, RIPEMD160 and CRC32.
+
+2015-05-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ More optimized CRC implementations.
+ + commit 06e122baa3321483a47bbf82fd2a4540becfa0c9
+ * cipher/crc.c (crc32_table, crc24_table): Replace with new table
+ contents.
+ (update_crc32, CRC24_INIT, CRC24_POLY): Remove.
+ (crc32_next, crc32_next4, crc24_init, crc24_next, crc24_next4)
+ (crc24_final): New.
+ (crc24rfc2440_init): Use crc24_init.
+ (crc32_write): Rewrite to use crc32_next & crc32_next4.
+ (crc24_write): Rewrite to use crc24_next & crc24_next4.
+ (crc32_final, crc32rfc1510_final): Use buf_put_be32.
+ (crc24rfc2440_final): Use crc24_final & buf_put_le32.
+ * tests/basic.c (check_digests): Add CRC "123456789" tests.
+
+ Enable AMD64 AES implementation for WIN64.
+ + commit 66129b3334a5aa54ff8a97981507e4704f759571
+ * cipher/rijndael-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/rijndael-internal.h (USE_AMD64_ASM): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (do_encrypt, do_decrypt)
+ [USE_AMD64_ASM && !HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS]: Use
+ assembly block to call AMD64 assembly encrypt/decrypt function.
+
+ Enable AMD64 Whirlpool implementation for WIN64.
+ + commit 8422d5d699265b960bd1ca837044ee052fc5b614
+ * cipher/whirlpool-sse2-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/whirlpool.c (USE_AMD64_ASM): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [USE_AMD64_ASM] (ASM_FUNC_ABI, ASM_EXTRA_STACK): New.
+ [USE_AMD64_ASM] (_gcry_whirlpool_transform_amd64): Add ASM_FUNC_ABI to
+ prototype.
+ [USE_AMD64_ASM] (whirlpool_transform): Add ASM_EXTRA_STACK to stack
+ burn value.
+
+ Enable AMD64 SHA512 implementations for WIN64.
+ + commit 1089a13073c26a9a456e43ec38d937e6ee7f4077
+ * cipher/sha512-avx-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/sha512-avx-bmi2-amd64.S: Ditto.
+ * cipher/sha512-ssse3-amd64.S: Ditto.
+ * cipher/sha512.c (USE_SSSE3, USE_AVX, USE_AVX2): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [USE_SSSE3 || USE_AVX || USE_AVX2] (ASM_FUNC_ABI)
+ (ASM_EXTRA_STACK): New.
+ (_gcry_sha512_transform_amd64_ssse3, _gcry_sha512_transform_amd64_avx)
+ (_gcry_sha512_transform_amd64_avx_bmi2): Add ASM_FUNC_ABI to
+ prototypes.
+ (transform): Add ASM_EXTRA_STACK to stack burn value.
+
+ Enable AMD64 SHA256 implementations for WIN64.
+ + commit 022959099644f64df5f2a83ade21159864f64837
+ * cipher/sha256-avx-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/sha256-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha256-ssse3-amd64.S: Ditto.
+ * cipher/sha256.c (USE_SSSE3, USE_AVX, USE_AVX2): Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [USE_SSSE3 || USE_AVX || USE_AVX2] (ASM_FUNC_ABI)
+ (ASM_EXTRA_STACK): New.
+ (_gcry_sha256_transform_amd64_ssse3, _gcry_sha256_transform_amd64_avx)
+ (_gcry_sha256_transform_amd64_avx2): Add ASM_FUNC_ABI to prototypes.
+ (transform): Add ASM_EXTRA_STACK to stack burn value.
+
+ Enable AMD64 SHA1 implementations for WIN64.
+ + commit e433676a899fa0d274d40547166b03c7c8bd8e78
+ * cipher/sha1-avx-amd64.S: Enable when
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ (ELF): New macro to mask lines with ELF specific commands.
+ * cipher/sha1-avx-bmi2-amd64.S: Ditto.
+ * cipher/sha1-ssse3-amd64.S: Ditto.
+ * cipher/sha1.c (USE_SSSE3, USE_AVX, USE_BMI2): Enable
+ when HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS defined.
+ [USE_SSSE3 || USE_AVX || USE_BMI2] (ASM_FUNC_ABI)
+ (ASM_EXTRA_STACK): New.
+ (_gcry_sha1_transform_amd64_ssse3, _gcry_sha1_transform_amd64_avx)
+ (_gcry_sha1_transform_amd64_avx_bmi2): Add ASM_FUNC_ABI to
+ prototypes.
+ (transform): Add ASM_EXTRA_STACK to stack burn value.
+
+2015-05-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Enable AES/AES-NI, AES/SSSE3 and GCM/PCLMUL implementations on WIN64.
+ + commit 4e09aaa36d151c3312019724a77fc09aa345b82f
+ * cipher/cipher-gcm-intel-pclmul.c (_gcry_ghash_intel_pclmul)
+ ( _gcry_ghash_intel_pclmul) [__WIN64__]: Store non-volatile vector
+ registers before use and restore after.
+ * cipher/cipher-internal.h (GCM_USE_INTEL_PCLMUL): Remove dependency
+ on !defined(__WIN64__).
+ * cipher/rijndael-aesni.c [__WIN64__] (aesni_prepare_2_6_variable,
+ aesni_prepare, aesni_prepare_2_6, aesni_cleanup)
+ ( aesni_cleanup_2_6): New.
+ [!__WIN64__] (aesni_prepare_2_6_variable, aesni_prepare_2_6): New.
+ (_gcry_aes_aesni_do_setkey, _gcry_aes_aesni_cbc_enc)
+ (_gcry_aesni_ctr_enc, _gcry_aesni_cfb_dec, _gcry_aesni_cbc_dec)
+ (_gcry_aesni_ocb_crypt, _gcry_aesni_ocb_auth): Use
+ 'aesni_prepare_2_6'.
+ * cipher/rijndael-internal.h (USE_SSSE3): Enable if
+ HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS or
+ HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS.
+ (USE_AESNI): Remove dependency on !defined(__WIN64__)
+ * cipher/rijndael-ssse3-amd64.c [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS]
+ (vpaes_ssse3_prepare, vpaes_ssse3_cleanup): New.
+ [!HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (vpaes_ssse3_prepare): New.
+ (vpaes_ssse3_prepare_enc, vpaes_ssse3_prepare_dec): Use
+ 'vpaes_ssse3_prepare'.
+ (_gcry_aes_ssse3_do_setkey, _gcry_aes_ssse3_prepare_decryption): Use
+ 'vpaes_ssse3_prepare' and 'vpaes_ssse3_cleanup'.
+ [HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS] (X): Add masking macro to
+ exclude '.type' and '.size' markers from assembly code, as they are
+ not support on WIN64/COFF objects.
+ * configure.ac (gcry_cv_gcc_attribute_ms_abi)
+ (gcry_cv_gcc_attribute_sysv_abi, gcry_cv_gcc_default_abi_is_ms_abi)
+ (gcry_cv_gcc_default_abi_is_sysv_abi)
+ (gcry_cv_gcc_win64_platform_as_ok): New checks.
+
+ Add W64 support for mpi amd64 assembly.
+ + commit 460355f23e770637d29e3af7b998a957a2b5bc88
+ acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Set
+ 'ac_cv_sys_symbol_underscore=no' on MingW-W64.
+ mpi/amd64/func_abi.h: New.
+ mpi/amd64/mpih-add1.S (_gcry_mpih_add_n): Add FUNC_ENTRY and FUNC_EXIT.
+ mpi/amd64/mpih-lshift.S (_gcry_mpih_lshift): Ditto.
+ mpi/amd64/mpih-mul1.S (_gcry_mpih_mul_1): Ditto.
+ mpi/amd64/mpih-mul2.S (_gcry_mpih_addmul_1): Ditto.
+ mpi/amd64/mpih-mul3.S (_gcry_mpih_submul_1): Ditto.
+ mpi/amd64/mpih-rshift.S (_gcry_mpih_rshift): Ditto.
+ mpi/amd64/mpih-sub1.S (_gcry_mpih_sub_n): Ditto.
+ mpi/config.links [host=x86_64-*mingw*]: Enable assembly modules.
+ [host=x86_64-*-*]: Append mpi/amd64/func_abi.h to mpi/asm-syntax.h.
+
+ DES: Silence compiler warnings on Windows.
+ + commit 6c21cf5fed1ad430fa41445eac2350802bc8aaed
+ * cipher/des.c (working_memcmp): Make pointer arguments 'const void *'.
+
+ Cast pointers to integers using uintptr_t instead of long.
+ + commit 9cf224322007d90193d4910f0da6e0e29ce01d70
+
+
+ Fix rndhw for 64-bit Windows build.
+ + commit d5a7e00b6b222566a5650639ef29684b047c1909
+ * configure.ac: Add sizeof check for 'void *'.
+ * random/rndhw.c (poll_padlock): Check for SIZEOF_VOID_P == 8
+ instead of defined(__LP64__).
+ (RDRAND_LONG): Check for SIZEOF_UNSIGNED_LONG == 8 instead of
+ defined(__LP64__).
+
+ Prepare random/win32.c fast poll for 64-bit Windows.
+ + commit 0cdd24456b33defc7f8176fa82ab694fbc284385
+ * random/win32.c (_gcry_rndw32_gather_random_fast) [ADD]: Rename to
+ ADDINT.
+ (_gcry_rndw32_gather_random_fast): Add ADDPTR.
+ (_gcry_rndw32_gather_random_fast): Disable entropy gathering from
+ GetQueueStatus(QS_ALLEVENTS).
+ (_gcry_rndw32_gather_random_fast): Change minimumWorkingSetSize and
+ maximumWorkingSetSize to SIZE_T from DWORD.
+ (_gcry_rndw32_gather_random_fast): Only add lower 32-bits of
+ minimumWorkingSetSize and maximumWorkingSetSize to random poll.
+ (_gcry_rndw32_gather_random_fast) [__WIN64__]: Read TSC directly
+ using intrinsic.
+
+ Disable GCM and AES-NI assembly implementations for WIN64.
+ + commit f701954555340a503f6e52cc18d58b0c515427b7
+ * cipher/cipher-internal.h (GCM_USE_INTEL_PCLMUL): Do not enable when
+ __WIN64__ defined.
+ * cipher/rijndael-internal.h (USE_AESNI): Ditto.
+
+ Disable building mpi assembly routines on WIN64.
+ + commit e78560a4b717f7154f910a8ce4128de152f586da
+ * mpi/config.links: Disable assembly for host 'x86_64-*mingw32*'.
+
+ Fix packed attribute check for Windows targets.
+ + commit e886e4f5e73fe6a9f9191f5155852ce5d8bb88fe
+ * configure.ac (gcry_cv_gcc_attribute_packed): Move 'long b' to its
+ own packed structure.
+
+ Fix tail handling in buf_xor_1.
+ + commit c2dba93e639639bdac139b3a3a456d10ddc61f79
+ * cipher/bufhelp.h (buf_xor_1): Increment source pointer at tail
+ handling.
+
+ Add --disable-hwf for basic tests.
+ + commit 839a3bbe2bb045139223b32753d656cc6c3d4669
+ * tests/basic.c (main): Add handling for '--disable-hwf'.
+
+ Use more odd chuck sizes for check_one_md.
+ + commit 9f086ffa43f2507b9d17522a0a2e394cb273baf8
+ * tests/basic.c (check_one_md): Make chuck size vary oddly, instead
+ of using fixed length of 1000 bytes.
+
+ Enable more modes in basic ciphers test.
+ + commit e40eff94f9f8654c3d29e03bbb7e5ee6a43c1435
+ * src/gcrypt.h.in (GCRY_OCB_BLOCK_LEN): New.
+ * tests/basic.c (check_one_cipher_core_reset): New.
+ (check_one_cipher_core): Use check_one_cipher_core_reset inplace of
+ gcry_cipher_reset.
+ (check_ciphers): Add CCM and OCB modes for block cipher tests.
+
+ Fix reseting cipher in OCB mode.
+ + commit 88842cbc68beb4f73c87fdbcb74182cba818f789
+ * cipher/cipher.c (cipher_reset): Setup default taglen for OCB after
+ clearing state.
+
+2015-04-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix buggy RC4 AMD64 assembly and add test to notice similar issues.
+ + commit 124dfce7c5a2d9405fa2b2832e91ac1267943830
+ * cipher/arcfour-amd64.S (_gcry_arcfour_amd64): Fix swapped store of
+ 'x' and 'y'.
+ * tests/basic.c (get_algo_mode_blklen): New.
+ (check_one_cipher_core): Add new tests for split buffer input on
+ encryption and decryption.
+
+2015-04-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Disallow compiler from generating SSE instructions in mixed C+asm source
+ + commit f88266c0f868d7bf51a215d5531bb9f2b4dad19e
+ * cipher/cipher-gcm-intel-pclmul.c [gcc-version >= 4.4]: Add GCC target
+ pragma to disable compiler use of SSE.
+ * cipher/rijndael-aesni.c [gcc-version >= 4.4]: Ditto.
+ * cipher/rijndael-ssse3-amd64.c [gcc-version >= 4.4]: Ditto.
+
+2015-04-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add OCB bulk crypt/auth functions for AES/AES-NI.
+ + commit 305cc878d395475c46b4ef52f4764bd0c85bf8ac
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add bulk.ocb_crypt
+ and bulk.ocb_auth.
+ (_gcry_cipher_ocb_get_l): New prototype.
+ * cipher/cipher-ocb.c (get_l): Rename to ...
+ (_gcry_cipher_ocb_get_l): ... this.
+ (_gcry_cipher_ocb_authenticate, ocb_crypt): Use bulk function when
+ available.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Setup OCB bulk
+ functions for AES.
+ * cipher/rijndael-aesni.c (get_l, aesni_ocb_enc, aes_ocb_dec)
+ (_gcry_aes_aesni_ocb_crypt, _gcry_aes_aesni_ocb_auth): New.
+ * cipher/rijndael.c [USE_AESNI] (_gcry_aes_aesni_ocb_crypt)
+ (_gcry_aes_aesni_ocb_auth): New prototypes.
+ (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth): New.
+ * src/cipher.h (_gcry_aes_ocb_crypt, _gcry_aes_ocb_auth): New
+ prototypes.
+ * tests/basic.c (check_ocb_cipher_largebuf): New.
+ (check_ocb_cipher): Add large buffer encryption/decryption test.
+
+2015-04-15 Werner Koch <wk@gnupg.org>
+
+ tests: Add option to time the S2K function.
+ + commit fe38d3815b4cd203cd529949e244aca80d32897f
+ * tests/t-kdf.c: Include stopwatch.h.
+ (dummy_consumer): new.
+ (bench_s2k): New.
+ (main): Add option parser and option --s2k.
+
+ tests: Improve stopwatch.h.
+ + commit 3b03a3b493233a472da531d8d9582d1be6d376b0
+ * tests/stopwatch.h (elapsed_time): Add arg divisor.
+
+2015-04-13 Werner Koch <wk@gnupg.org>
+
+ mpi: Fix gcry_mpi_copy for NULL opaque data.
+ + commit 9fca46864e1b5a9c788072113589454adb89fa97
+ * mpi/mpiutil.c (_gcry_mpi_copy): Copy opaque only if needed.
+
+2015-03-21 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ wipememory: use one-byte aligned type for unaligned memory accesses.
+ + commit a06fbc0d1e98eb1218eff55ad2f37d471e4f33b2
+ * src/g10lib.h (fast_wipememory2_unaligned_head): Enable unaligned
+ access only when HAVE_GCC_ATTRIBUTE_PACKED and
+ HAVE_GCC_ATTRIBUTE_ALIGNED defined.
+ (fast_wipememory_t): New.
+ (fast_wipememory2): Use 'fast_wipememory_t'.
+
+ bufhelp: use one-byte aligned type for unaligned memory accesses.
+ + commit 92fa5f16d69707e302c0f85b2e5e80af8dc037f1
+ * cipher/bufhelp.h (BUFHELP_FAST_UNALIGNED_ACCESS): Enable only when
+ HAVE_GCC_ATTRIBUTE_PACKED and HAVE_GCC_ATTRIBUTE_ALIGNED are defined.
+ (bufhelp_int_t): New type.
+ (buf_cpy, buf_xor, buf_xor_1, buf_xor_2dst, buf_xor_n_copy_2): Use
+ 'bufhelp_int_t'.
+ [BUFHELP_FAST_UNALIGNED_ACCESS] (bufhelp_u32_t, bufhelp_u64_t): New.
+ [BUFHELP_FAST_UNALIGNED_ACCESS] (buf_get_be32, buf_get_le32)
+ (buf_put_be32, buf_put_le32, buf_get_be64, buf_get_le64)
+ (buf_put_be64, buf_put_le64): Use 'bufhelp_uXX_t'.
+ * configure.ac (gcry_cv_gcc_attribute_packed): New.
+
+ tests/bench-slope: fix memory-leak and use-after-free bugs.
+ + commit aa234561d00c3fb15fe501df4bf58f3db7c7c06b
+ * tests/bench-slope.c (do_slope_benchmark): Free 'measurements' at end.
+ (bench_mac_init): Move 'key' free at end of function.
+
+2015-03-19 Werner Koch <wk@gnupg.org>
+
+ Fix two pedantic warnings.
+ + commit f5832285b0e420d77be1b8da10a1e1d86583b414
+ * src/gcrypt.h.in (gcry_mpi_flag, gcry_mac_algos): Remove trailing
+ comma.
+
+2015-03-16 Werner Koch <wk@gnupg.org>
+
+ Use well defined type instead of size_t in secmem.c.
+ + commit db8ae3616987fa288173446398a107e31e2e28aa
+ * src/secmem.c (ptr_into_pool_p): Replace size_t by uintptr_t.
+
+ Make uintptr_t global available.
+ + commit f0f60c1a04d664936bcf52e8f46705bdc63e7ad9
+ * cipher/bufhelp.h: Move include for uintptr_t to ...
+ * src/types.h: here. Check that config.h has been included.
+
+ mpi: Remove useless condition.
+ + commit 0a9cdb8ae092d050ca12a7a4f2f50e25b82154ec
+ * mpi/mpi-pow.c: Remove condition rp==mp.
+
+ cipher: Remove useless NULL check.
+ + commit fbb97dcf763e28e81e01092ad4c934b3eaf88cc8
+ * cipher/hash-common.c (_gcry_md_block_write): Remove NUL check for
+ hd->buf.
+
+2015-02-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix in-place encryption for OCB mode.
+ + commit 5e66a4f8d5a63f58caeee367433dd8dd32346083
+ * cipher/cipher-ocb.c (ocb_checksum): New.
+ (ocb_crypt): Move checksum calculation outside main crypt loop, do
+ checksum calculation for encryption before inbuf is overwritten.
+ * tests/basic.c (check_ocb_cipher): Rename to ...
+ (do_check_ocb_cipher): ... to this and add argument for testing
+ in-place encryption/decryption.
+ (check_ocb_cipher): New.
+
+2015-02-27 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: fix t-sexp.c.
+ + commit 505decf5369970219ddc9e78a20f97c623957b78
+ * tests/t-sexp.c (bug_1594): Free N and PUBKEY.
+
+ mpi: Avoid data-dependent timing variations in mpi_powm.
+ + commit 6636c4fd0c6ceab9f79827bf96967d1e112c0b82
+ * mpi/mpi-pow.c (mpi_powm): Access all data in the table by
+ mpi_set_cond.
+
+ mpi: Revise mpi_powm.
+ + commit 1fa8cdb933505960d4e4b4842b122d4e06953e88
+ * mpi/mpi-pow.c (_gcry_mpi_powm): Rename the table to PRECOMP.
+
+2015-02-23 Werner Koch <wk@gnupg.org>
+
+ cipher: Use ciphertext blinding for Elgamal decryption.
+ + commit 410d70bad9a650e3837055e36f157894ae49a57d
+ * cipher/elgamal.c (USE_BLINDING): New.
+ (decrypt): Rewrite to use ciphertext blinding.
+
+2015-02-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Add mpi_set_cond.
+ + commit 653a9fa1a3a4c35a4dc1841cb57d7e2a318f3288
+ * mpi/mpiutil.c (_gcry_mpi_set_cond): New.
+ (_gcry_mpi_swap_cond): Fix types.
+ * src/mpi.h (mpi_set_cond): New.
+
+2015-01-30 Werner Koch <wk@gnupg.org>
+
+ w32: Use -static-libgcc to avoid linking to libgcc_s_sjlj-1.dll.
+ + commit 40a7bdf50e19faaf106470897fed72af623adc50
+ * src/Makefile.am (extra_ltoptions): New.
+ (libgcrypt_la_LDFLAGS): Use it.
+
+2015-01-28 Werner Koch <wk@gnupg.org>
+
+ Fix building of GOST s-boxes when cross-compiling.
+ + commit 2564d204e408b296425ac0660c6bdc6270575fb6
+ * cipher/Makefile.am (gost-s-box): USe CC_FOR_BUILD.
+ (noinst_PROGRAMS): Remove.
+ (EXTRA_DIST): New.
+ (CLEANFILES): New.
+
+2015-01-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: fix wrong ifdef for SSSE3 setkey.
+ + commit ceaa97f0d849c07f3a15b642fc3a2b0a477b4a47
+ * cipher/rijndael.c (do_setkey): Use USE_SSSE3 instead of USE_AESNI
+ around SSSE3 setkey selection.
+
+2015-01-16 Werner Koch <wk@gnupg.org>
+
+ Add OCB cipher mode.
+ + commit 067d7d8752d4d8a98f8e0e5e9b1a5b13e1b7ff9c
+ * cipher/cipher-ocb.c: New.
+ * cipher/Makefile.am (libcipher_la_SOURCES): Add cipher-ocb.c
+ * cipher/cipher-internal.h (OCB_BLOCK_LEN, OCB_L_TABLE_SIZE): New.
+ (gcry_cipher_handle): Add fields marks.finalize and u_mode.ocb.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Add OCB mode.
+ (_gcry_cipher_open_internal): Setup default taglen of OCB.
+ (cipher_reset): Clear OCB specific data.
+ (cipher_encrypt, cipher_decrypt, _gcry_cipher_authenticate)
+ (_gcry_cipher_gettag, _gcry_cipher_checktag): Call OCB functions.
+ (_gcry_cipher_setiv): Add OCB specific nonce setting.
+ (_gcry_cipher_ctl): Add GCRYCTL_FINALIZE and GCRYCTL_SET_TAGLEN
+
+ * src/gcrypt.h.in (GCRYCTL_SET_TAGLEN): New.
+ (gcry_cipher_final): New.
+
+ * cipher/bufhelp.h (buf_xor_1): New.
+
+ * tests/basic.c (hex2buffer): New.
+ (check_ocb_cipher): New.
+ (main): Call it here. Add option --cipher-modes.
+ * tests/bench-slope.c (bench_aead_encrypt_do_bench): Call
+ gcry_cipher_final.
+ (bench_aead_decrypt_do_bench): Ditto.
+ (bench_aead_authenticate_do_bench): Ditto. Check error code.
+ (bench_ocb_encrypt_do_bench): New.
+ (bench_ocb_decrypt_do_bench): New.
+ (bench_ocb_authenticate_do_bench): New.
+ (ocb_encrypt_ops): New.
+ (ocb_decrypt_ops): New.
+ (ocb_authenticate_ops): New.
+ (cipher_modes): Add them.
+ (cipher_bench_one): Skip wrong block length for OCB.
+ * tests/benchmark.c (cipher_bench): Add field noncelen to MODES. Add
+ OCB support.
+
+2015-01-15 Werner Koch <wk@gnupg.org>
+
+ Add functions to count trailing zero bits in a word.
+ + commit 9d2a22c94ae99f9301321082c4fb8d73f4085fda
+ * cipher/bithelp.h (_gcry_ctz, _gcry_ctz64): New.
+ * configure.ac (HAVE_BUILTIN_CTZ): Add new test.
+
+2015-01-08 Werner Koch <wk@gnupg.org>
+
+ cipher: Prepare for OCB mode.
+ + commit 9d328962660da72f094dc5424d5ef67abbaffdf6
+ * src/gcrypt.h.in (GCRY_CIPHER_MODE_OCB): New.
+
+2015-01-06 Werner Koch <wk@gnupg.org>
+
+ Make make distcheck work again.
+ + commit 4f7dcdc25af269b12275126edeef30b262fb891d
+ * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Remove --enable-ciphers.
+ * cipher/Makefile.am (DISTCLEANFILES): Add gost-sb.h.
+
+2015-01-06 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ stribog: Reduce table size to the needed one.
+ + commit e4de52378a85cf383994ded8edf0d5cf98dcb10c
+ * cipher/stribog.c (C16): Avoid allocating superfluous space.
+
+ gostr3411-94: Fix the iteration count for length filling loop.
+ + commit 05dc5bcd234909ae9c9366b653346076b9a834ed
+ * cipher/gostr3411-94.c (gost3411_final): Fix loop
+
+2015-01-05 Werner Koch <wk@gnupg.org>
+
+ random: Silent warning under NetBSD using rndunix.
+ + commit 817472358a093438e802380caecf7139406400cf
+ * random/rndunix.c (STDERR_FILENO): Define if needed.
+ (start_gatherer): Re-open standard descriptors. Fix an
+ unsigned/signed pointer warning.
+
+ primegen: Fix memory leak for invalid call sequences.
+ + commit 8c5eee51d9a25b143e41ffb7ff4a6b2a29b82d83
+ * cipher/primegen.c (prime_generate_internal): Refactor generator code
+ to not leak memory for non-implemented feature.
+ (_gcry_prime_group_generator): Refactor to not leak memory for invalid
+ args. Also make sure that R_G is set as soon as possible.
+
+ doc: Update yat2m to current upstream version (GnuPG).
+ + commit dd5df198727ea5d8f6b04288e14fd732051453c8
+
+
+ build: Require automake 1.14.
+ + commit f65276970a6dcd6d9bca94cecc49b68acdcc9492
+ * configure.ac (AM_INIT_AUTOMAKE): Add serial-tests.
+
+ Replace camel case of internal scrypt functions.
+ + commit 1a6d65ac0aab335541726d02f2046d883a768ec3
+ * cipher/scrypt.c (_salsa20_core): Rename to salsa20_core. Change
+ callers.
+ (_scryptBlockMix): Rename to scrypt_block_mix. Change callers.
+ (_scryptROMix): Rename to scrypt_ro_mix. Change callers.
+
+2015-01-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rmd160: restore native-endian store in _gcry_rmd160_mixblock.
+ + commit d7c7453cf5e6b8f3c6b522a30e680f844a28c9de
+ * cipher/rmd160.c (_gcry_rmd160_mixblock): Store result to buffer in
+ native-endianess.
+
+2014-12-27 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add Intel SSSE3 based vector permutation AES implementation.
+ + commit 8eabecc883332156adffc1df42d27f614c157e06
+ * cipher/Makefile.am: Add 'rijndael-ssse3-amd64.c'.
+ * cipher/rijndael-internal.h (USE_SSSE3): New.
+ (RIJNDAEL_context_s) [USE_SSSE3]: Add 'use_ssse3'.
+ * cipher/rijndael-ssse3-amd64.c: New.
+ * cipher/rijndael.c [USE_SSSE3] (_gcry_aes_ssse3_do_setkey)
+ (_gcry_aes_ssse3_prepare_decryption, _gcry_aes_ssse3_encrypt)
+ (_gcry_aes_ssse3_decrypt, _gcry_aes_ssse3_cfb_enc)
+ (_gcry_aes_ssse3_cbc_enc, _gcry_aes_ssse3_ctr_enc)
+ (_gcry_aes_ssse3_cfb_dec, _gcry_aes_ssse3_cbc_dec): New.
+ (do_setkey): Add HWF check for SSSE3 and setup for SSSE3
+ implementation.
+ (prepare_decryption, _gcry_aes_cfb_enc, _gcry_aes_cbc_enc)
+ (_gcry_aes_ctr_enc, _gcry_aes_cfb_dec, _gcry_aes_cbc_dec): Add
+ selection for SSSE3 implementation.
+ * configure.ac [host=x86_64]: Add 'rijndael-ssse3-amd64.lo'.
+
+2014-12-25 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ random-csprng: fix compiler warnings on ARM.
+ + commit c2e1f8fea271f3ef8027809547c4a52e0b1e24a2
+ * random/random-csprng.c (_gcry_rngcsprng_update_seed_file)
+ (read_pool): Cast keypool and rndpool to 'unsigned long *' through
+ 'void *'.
+
+ scrypt: fix compiler warnings on ARM.
+ + commit 1dab4c9422bf0f3cdc7a4d3ccf9db090abd90e94
+ * cipher/scrypt.c (_scryptBlockMix): Cast X to 'u32 *' through 'void *'.
+
+ secmem: fix compiler warnings on ARM.
+ + commit 99faf9cb34f872144313403f29f3379798debfc9
+ * src/secmem.c (ADDR_TO_BLOCK, mb_get_next, mb_get_new): Cast pointer
+ from 'char *' to 'memblock_t *' through 'void *'.
+ (MB_WIPE_OUT): Remove unneeded cast to 'memblock_t *'.
+
+ hash: fix compiler warning on ARM.
+ + commit 4515315f61fbf79413e150fbd1d5f5a2435f2bc5
+ * cipher/md.c (md_open, md_copy): Cast 'char *' to ctx through
+ 'void *'.
+ * cipher/md4.c (md4_final): Use buf_put_* helper instead of
+ converting 'char *' to 'u32 *'.
+ * cipher/md5.c (md5_final): Ditto.
+ * cipher/rmd160.c (_gcry_rmd160_mixblock, rmd160_final): Ditto.
+ * cipher/sha1.c (sha1_final): Ditto.
+ * cipher/sha256.c (sha256_final): Ditto.
+ * cipher/sha512.c (sha512_final): Ditto.
+ * cipher/tiger.c (tiger_final): Ditto.
+
+ rijndael: fix compiler warnings on ARM.
+ + commit cc26106dbebeb84d481661813edc3e5aea9a7d99
+ * cipher/rijndael-internal.h (RIJNDAEL_context_s): Add u32 variants of
+ keyschedule arrays to unions u1 and u2.
+ (keyschedenc32, keyscheddec32): New.
+ * cipher/rijndael.c (u32_a_t): Remove.
+ (do_setkey): Add and use tkk[].data32, k_u32, tk_u32 and W_u32; Remove
+ casting byte arrays to u32_a_t.
+ (prepare_decryption, do_encrypt_fn, do_decrypt_fn): Use keyschedenc32
+ and keyscheddec32; Remove casting byte arrays to u32_a_t.
+
+2014-12-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Poly1305-AEAD: updated implementation to match draft-irtf-cfrg-chacha20-poly1305-03
+ + commit 520070e02e2e6ee7228945015573a6e1f4895ec3
+ * cipher/cipher-internal.h (gcry_cipher_handle): Use separate byte
+ counters for AAD and data in Poly1305.
+ * cipher/cipher-poly1305.c (poly1305_fill_bytecount): Remove.
+ (poly1305_fill_bytecounts, poly1305_do_padding): New.
+ (poly1305_aad_finish): Fill padding to Poly1305 and do not fill AAD
+ length.
+ (_gcry_cipher_poly1305_authenticate, _gcry_cipher_poly1305_encrypt)
+ (_gcry_cipher_poly1305_decrypt): Update AAD and data length separately.
+ (_gcry_cipher_poly1305_tag): Fill padding and bytecounts to Poly1305.
+ (_gcry_cipher_poly1305_setkey, _gcry_cipher_poly1305_setiv): Reset
+ AAD and data byte counts; only allow 96-bit IV.
+ * cipher/cipher.c (_gcry_cipher_open_internal): Limit Poly1305-AEAD to
+ ChaCha20 cipher.
+ * tests/basic.c (_check_poly1305_cipher): Update test-vectors.
+ (check_ciphers): Limit Poly1305-AEAD checks to ChaCha20.
+ * tests/bench-slope.c (cipher_bench_one): Ditto.
+
+ chacha20: allow setting counter for stream random access.
+ + commit 11b8d2d449a7bc664b4371ae14c57caa6704d272
+ * cipher/chacha20.c (CHACHA20_CTR_SIZE): New.
+ (chacha20_ivsetup): Add setup for full counter.
+ (chacha20_setiv): Allow ivlen == CHACHA20_CTR_SIZE.
+
+ gcm: do not pass extra key pointer for setupM/fillM.
+ + commit c964321c8a1328e89d636d899a45d68802f5ac9f
+ * cipher/cipher-gcm-intel-pclmul.c
+ (_gcry_ghash_setup_intel_pclmul): Remove 'h' parameter.
+ * cipher/cipher-gcm.c (_gcry_ghash_setup_intel_pclmul): Ditto.
+ (fillM): Get 'h' pointer from 'c'.
+ (setupM): Remome 'h' parameter.
+ (_gcry_cipher_gcm_setkey): Only pass 'c' to setupM.
+
+ rijndael: use more compact look-up tables and add table prefetching.
+ + commit 2374753938df64f6fd8015b44613806a326eff1a
+ * cipher/rijndael-internal.h (rijndael_prefetchfn_t): New.
+ (RIJNDAEL_context): Add 'prefetch_enc_fn' and 'prefetch_dec_fn'.
+ * cipher/rijndael-tables.h (S, T1, T2, T3, T4, T5, T6, T7, T8, S5, U1)
+ (U2, U3, U4): Remove.
+ (encT, dec_tables, decT, inv_sbox): Add.
+ * cipher/rijndael.c (_gcry_aes_amd64_encrypt_block)
+ (_gcry_aes_amd64_decrypt_block, _gcry_aes_arm_encrypt_block)
+ (_gcry_aes_arm_encrypt_block): Add parameter for passing table pointer
+ to assembly implementation.
+ (prefetch_table, prefetch_enc, prefetch_dec): New.
+ (do_setkey): Setup context prefetch functions depending on selected
+ rijndael implementation; Use new tables for key setup.
+ (prepare_decryption): Use new tables for decryption key setup.
+ (do_encrypt_aligned): Rename to...
+ (do_encrypt_fn): ... to this, change to use new compact tables,
+ make handle unaligned input and unroll rounds loop by two.
+ (do_encrypt): Remove handling of unaligned input/output; pass table
+ pointer to assembly implementations.
+ (rijndael_encrypt, _gcry_aes_cfb_enc, _gcry_aes_cbc_enc)
+ (_gcry_aes_ctr_enc, _gcry_aes_cfb_dec): Prefetch encryption tables
+ before encryption.
+ (do_decrypt_aligned): Rename to...
+ (do_decrypt_fn): ... to this, change to use new compact tables,
+ make handle unaligned input and unroll rounds loop by two.
+ (do_decrypt): Remove handling of unaligned input/output; pass table
+ pointer to assembly implementations.
+ (rijndael_decrypt, _gcry_aes_cbc_dec): Prefetch decryption tables
+ before decryption.
+ * cipher/rijndael-amd64.S: Use 1+1.25 KiB tables for
+ encryption+decryption; remove tables from assembly file.
+ * cipher/rijndael-arm.S: Ditto.
+
+2014-12-15 Werner Koch <wk@gnupg.org>
+
+ build: Add configure option --disable-doc.
+ + commit ad50e360ef4851e66e51a03fc420175636336b58
+ * Makefile.am (AUTOMAKE_OPTIONS): Remove.
+ (doc) [!BUILD_DOC]: Do not recurse into the dir.
+ * configure.ac (AM_INIT_AUTOMAKE): Add option formerly in Makefile.am.
+ (BUILD_DOC): Add new am_conditional.
+
+2014-12-12 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: further optimizations for AES-NI accelerated CBC and CFB bulk modes
+ + commit 4f46374502eb988d701b904f83819e2cf7b1755c
+ * cipher/rijndael-aesni.c (do_aesni_enc, do_aesni_dec): Pass
+ input/output through SSE register XMM0.
+ (do_aesni_cfb): Remove.
+ (_gcry_aes_aesni_encrypt, _gcry_aes_aesni_decrypt): Add loading/storing
+ input/output to/from XMM0.
+ (_gcry_aes_aesni_cfb_enc, _gcry_aes_aesni_cbc_enc)
+ (_gcry_aes_aesni_cfb_dec): Update to use renewed 'do_aesni_enc' and
+ move IV loading/storing outside loop.
+ (_gcry_aes_aesni_cbc_dec): Update to use renewed 'do_aesni_dec'.
+
+ GCM: move Intel PCLMUL accelerated implementation to separate file.
+ + commit 4a0795af021305f9240f23626a3796157db46bd7
+ * cipher/Makefile.am: Add 'cipher-gcm-intel-pclmul.c'.
+ * cipher/cipher-gcm-intel-pclmul.c: New.
+ * cipher/cipher-gcm.c [GCM_USE_INTEL_PCLMUL]
+ (_gcry_ghash_setup_intel_pclmul, _gcry_ghash_intel_pclmul): New
+ prototypes.
+ [GCM_USE_INTEL_PCLMUL] (gfmul_pclmul, gfmul_pclmul_aggr4): Move
+ to 'cipher-gcm-intel-pclmul.c'.
+ (ghash): Rename to...
+ (ghash_internal): ...this and move GCM_USE_INTEL_PCLMUL part to new
+ function in 'cipher-gcm-intel-pclmul.c'.
+ (setupM): Move GCM_USE_INTEL_PCLMUL part to new function in
+ 'cipher-gcm-intel-pclmul.c'; Add selection of ghash function based
+ on available HW acceleration.
+ (do_ghash_buf): Change use of 'ghash' to 'c->u_mode.gcm.ghash_fn'.
+ * cipher/internal.h (ghash_fn_t): New.
+ (gcry_cipher_handle): Remove 'use_intel_pclmul'; Add 'ghash_fn'.
+
+2014-12-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: split Padlock part to separate file.
+ + commit cbf4c8cb6bbda15eea61885279f2a6f1d4bcedfd
+ * cipher/Makefile.am: Add 'rijndael-padlock.c'.
+ * cipher/rijndael-padlock.c: New.
+ * cipher/rijndael.c (do_padlock, do_padlock_encrypt)
+ (do_padlock_decrypt): Move to 'rijndael-padlock.c'.
+ * configure.ac [mpi_cpu_arch=x86]: Add 'rijndael-padlock.lo'.
+
+2014-12-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: refactor to reduce number of #ifdefs and branches.
+ + commit 3d5b51786e2050c461e9791b59142a731462b66d
+ * cipher/rijndael-aesni.c (_gcry_aes_aesni_encrypt)
+ (_gcry_aes_aesni_decrypt): Make return stack burn depth.
+ * cipher/rijndael-amd64.S (_gcry_aes_amd64_encrypt_block)
+ (_gcry_aes_amd64_decrypt_block): Ditto.
+ * cipher/rijndael-arm.S (_gcry_aes_arm_encrypt_block)
+ (_gcry_aes_arm_decrypt_block): Ditto.
+ * cipher/rijndael-internal.h (RIJNDAEL_context_s)
+ (rijndael_cryptfn_t): New.
+ (RIJNDAEL_context): New members 'encrypt_fn' and 'decrypt_fn'.
+ * cipher/rijndael.c (_gcry_aes_amd64_encrypt_block)
+ (_gcry_aes_amd64_decrypt_block, _gcry_aes_aesni_encrypt)
+ (_gcry_aes_aesni_decrypt, _gcry_aes_arm_encrypt_block)
+ (_gcry_aes_arm_decrypt_block): Change prototypes.
+ (do_padlock_encrypt, do_padlock_decrypt): New.
+ (do_setkey): Separate key-length to rounds conversion from
+ HW features check; Add selection for ctx->encrypt_fn and
+ ctx->decrypt_fn.
+ (do_encrypt_aligned, do_decrypt_aligned): Move inside
+ '[!USE_AMD64_ASM && !USE_ARM_ASM]'; Move USE_AMD64_ASM and
+ USE_ARM_ASM to...
+ (do_encrypt, do_decrypt): ...here; Return stack depth; Remove second
+ temporary buffer from non-aligned input/output case.
+ (do_padlock): Move decrypt_flag to last argument; Return stack depth.
+ (rijndael_encrypt): Remove #ifdefs, just call ctx->encrypt_fn.
+ (_gcry_aes_cfb_enc, _gcry_aes_cbc_enc): Remove USE_PADLOCK; Call
+ ctx->encrypt_fn in place of do_encrypt/do_encrypt_aligned.
+ (_gcry_aes_ctr_enc): Call ctx->encrypt_fn in place of
+ do_encrypt_aligned; Make tmp buffer 16-byte aligned and wipe buffer
+ after use.
+ (rijndael_encrypt): Remove #ifdefs, just call ctx->decrypt_fn.
+ (_gcry_aes_cfb_dec): Remove USE_PADLOCK; Call ctx->decrypt_fn in place
+ of do_decrypt/do_decrypt_aligned.
+ (_gcry_aes_cbc_dec): Ditto; Make savebuf buffer 16-byte aligned.
+
+ rijndael: move AES-NI blocks before Padlock.
+ + commit dbf9e95dd3891f6e6ad370e8ab78fec03595687b
+ * cipher/rijndael.c (do_setkey, rijndael_encrypt, _gcry_aes_cfb_enc)
+ (rijndael_decrypt, _gcry_aes_cfb_dec): Move USE_AESNI before
+ USE_PADLOCK.
+ (check_decryption_praparation) [USE_PADLOCK]: Move to...
+ (prepare_decryption) [USE_PADLOCK]: ...here.
+
+ rijndael: split AES-NI functions to separate file.
+ + commit 67d529630e838daeb8cb9c6d7ef660c01ef34fee
+ * cipher/Makefile.in: Add 'rijndael-aesni.c'.
+ * cipher/rijndael-aesni.c: New.
+ * cipher/rijndael-internal.h: New.
+ * cipher/rijndael.c (MAXKC, MAXROUNDS, BLOCKSIZE, ATTR_ALIGNED_16)
+ (USE_AMD64_ASM, USE_ARM_ASM, USE_PADLOCK, USE_AESNI, RIJNDAEL_context)
+ (keyschenc, keyschdec, padlockkey): Move to 'rijndael-internal.h'.
+ (u128_s, aesni_prepare, aesni_cleanup, aesni_cleanup_2_6)
+ (aesni_do_setkey, do_aesni_enc, do_aesni_dec, do_aesni_enc_vec4)
+ (do_aesni_dec_vec4, do_aesni_cfb, do_aesni_ctr, do_aesni_ctr_4): Move
+ to 'rijndael-aesni.c'.
+ (prepare_decryption, rijndael_encrypt, _gcry_aes_cfb_enc)
+ (_gcry_aes_cbc_enc, _gcry_aes_ctr_enc, rijndael_decrypt)
+ (_gcry_aes_cfb_dec, _gcry_aes_cbc_dec) [USE_AESNI]: Move to functions
+ in 'rijdael-aesni.c'.
+ * configure.ac [mpi_cpu_arch=x86]: Add 'rijndael-aesni.lo'.
+
+2014-11-24 Werner Koch <wk@gnupg.org>
+
+ Remove duplicated prototypes.
+ + commit d53ea84bed37b973f7ce59262c50b33700cd8311
+ * src/gcrypt-int.h (_gcry_mpi_ec_new, _gcry_mpi_ec_set_mpi)
+ (gcry_mpi_ec_set_point): Remove.
+
+ tests: Add a prime mode to benchmark.
+ + commit 1b4210c204a5ef5e631187509e011b8468a134ef
+ * tests/benchmark.c (progress_cb): Add a single char mode.
+ (prime_bench): New.
+ (main): Add a "prime" mode. Factor with_progress out to file scope.
+
+2014-11-19 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Improve Montgomery curve implementation.
+ + commit e6130034506013d6153465a2bedb6fb08a43f74d
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Support
+ MPI_EC_MONTGOMERY.
+ * cipher/ecc.c (test_ecdh_only_keys): New.
+ (nist_generate_key): Call test_ecdh_only_keys for MPI_EC_MONTGOMERY.
+ (check_secret_key): Handle Montgomery curve of x-coordinate only.
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Resize points before the loop.
+ Simplify, using pointers of Q1, Q2, PRD, and SUM.
+
+2014-11-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Disable NEON for CPUs that are known to have broken NEON implementation.
+ + commit 95eef21583d8e998efc48f22898c1ae31b77cb48
+ * src/hwf-arm.c (detect_arm_proc_cpuinfo): Add parsing for CPU version
+ information and check if CPU is known to have broken NEON
+ implementation.
+ (_gcry_hwf_detect_arm): Filter out broken HW features.
+
+ Add ARM/NEON implementation of Poly1305.
+ + commit 0b520128551054d83fb0bb2db8873394f38de498
+ * cipher/Makefile.am: Add 'poly1305-armv7-neon.S'.
+ * cipher/poly1305-armv7-neon.S: New.
+ * cipher/poly1305-internal.h (POLY1305_USE_NEON)
+ (POLY1305_NEON_BLOCKSIZE, POLY1305_NEON_STATESIZE)
+ (POLY1305_NEON_ALIGNMENT): New.
+ * cipher/poly1305.c [POLY1305_USE_NEON]
+ (_gcry_poly1305_armv7_neon_init_ext)
+ (_gcry_poly1305_armv7_neon_finish_ext)
+ (_gcry_poly1305_armv7_neon_blocks, poly1305_armv7_neon_ops): New.
+ (_gcry_poly1305_init) [POLY1305_USE_NEON]: Select NEON implementation
+ if HWF_ARM_NEON set.
+ * configure.ac [neonsupport=yes]: Add 'poly1305-armv7-neon.lo'.
+
+ chacha20: add ARMv7/NEON implementation.
+ + commit c584f44543883346d5a565581ff99a0afce9c5e1
+ * cipher/Makefile.am: Add 'chacha20-armv7-neon.S'.
+ * cipher/chacha20-armv7-neon.S: New.
+ * cipher/chacha20.c (USE_NEON): New.
+ [USE_NEON] (_gcry_chacha20_armv7_neon_blocks): New.
+ (chacha20_do_setkey) [USE_NEON]: Use Neon implementation if
+ HWF_ARM_NEON flag set.
+ (selftest): Self-test encrypting buffer byte by byte.
+ * configure.ac [neonsupport=yes]: Add 'chacha20-armv7-neon.lo'.
+
+2014-10-08 Markus Teich <markus.teich@stusta.mhn.de>
+
+ mpi: Add gcry_mpi_ec_sub.
+ + commit 23ecadf309f8056c35cc092e58df801ac0eab862
+ * NEWS (gcry_mpi_ec_sub): New.
+ * doc/gcrypt.texi (gcry_mpi_ec_sub): New.
+ * mpi/ec.c (_gcry_mpi_ec_sub, sub_points_edwards): New.
+ (sub_points_montgomery, sub_points_weierstrass): New stubs.
+ * src/gcrypt-int.h (_gcry_mpi_ec_sub): New.
+ * src/gcrypt.h.in (gcry_mpi_ec_sub): New.
+ * src/libgcrypt.def (gcry_mpi_ec_sub): New.
+ * src/libgcrypt.vers (gcry_mpi_ec_sub): New.
+ * src/mpi.h (_gcry_mpi_ec_sub_points): New.
+ * src/visibility.c (gcry_mpi_ec_sub): New.
+ * src/visibility.h (gcry_mpi_ec_sub): New.
+
+2014-10-08 Werner Koch <wk@gnupg.org>
+
+ Fix prime test for 2 and lower and add check command to mpicalc.
+ + commit 5c906e2cdb14e93fb4915fdc69c7353a5fa35709
+ * cipher/primegen.c (check_prime): Return true for the small primes.
+ (_gcry_prime_check): Return correct values for 2 and lower numbers.
+
+ * src/mpicalc.c (do_primecheck): New.
+ (main): Add command 'P'.
+ (main): Allow for larger input data.
+
+2014-10-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add Whirlpool AMD64/SSE2 assembly implementation.
+ + commit de0ccd4dce7ec185a678d78878d4538dd609ca0f
+ * cipher/Makefile.am: Add 'whirlpool-sse2-amd64.S'.
+ * cipher/whirlpool-sse2-amd64.S: New.
+ * cipher/whirlpool.c (USE_AMD64_ASM): New.
+ (whirlpool_tables_s): New.
+ (rc, C0, C1, C2, C3, C4, C5, C6, C7): Combine these tables into single
+ structure and replace old tables with macros of same name.
+ (tab): New structure containing above tables.
+ [USE_AMD64_ASM] (_gcry_whirlpool_transform_amd64)
+ (whirlpool_transform): New.
+ * configure.ac [host=x86_64]: Add 'whirlpool-sse2-amd64.lo'.
+
+2014-10-04 Andrei Scherer <andsch@inbox.com>
+
+ Improved ripemd160 performance.
+ + commit 30bd759f398f45b04d0a783b875f59ce9bd1e51d
+ * cipher/rmd160.c (transform): Interleave the left and right lane
+ rounds to introduce more instruction level parallelism.
+
+2014-10-02 Werner Koch <wk@gnupg.org>
+
+ build: Document SYSROOT.
+ + commit 0ecd136a6ca02252f63ad229fa5240897bfe6544
+ * configure.ac: Mark SYSROOT as arg var.
+
+ build: Support SYSROOT based config script finding.
+ + commit 1e8b86494cf8fa045696bd447b16267ffd1797f0
+ * src/libgcrypt.m4: Add support for SYSROOT and set
+ gpg_config_script_warn. Use AC_PATH_PROG instead of AC_PATH_TOOL
+ because the config script is not expected to be installed with a
+ prefix for its name
+ * configure.ac: Print a library mismatch warning.
+ * m4/gpg-error.m4: Update from git master.
+
+2014-09-30 Werner Koch <wk@gnupg.org>
+
+ mac: Fix gcry_mac_close to allow for a NULL handle.
+ + commit 51dae8c8c4b63bb5e1685cbd8722e35342524737
+ * cipher/mac.c (_gcry_mac_close): Check for NULL.
+
+2014-09-03 Werner Koch <wk@gnupg.org>
+
+ Add a constant for a forthcoming new RNG.
+ + commit 8b960a807d168000d2690897a7634bd384ac1346
+ * src/gcrypt.h.in (GCRYCTL_DRBG_REINIT): New constant.
+
+2014-09-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add new Poly1305 MAC test vectors.
+ + commit 8a2a328742012a7c528dd007437185e4584c1e48
+ * tests/basic.c (check_mac): Add new test vectors for Poly1305 MAC.
+
+2014-09-02 Werner Koch <wk@gnupg.org>
+
+ asm: Allow building x86 and amd64 using old compilers.
+ + commit 5eec04a43e6c562e956353449be931dd43dfe1cc
+ * src/hwf-x86.c (get_xgetbv): Build only if AVX support is enabled.
+
+2014-08-21 Werner Koch <wk@gnupg.org>
+
+ sexp: Check args of gcry_sexp_build.
+ + commit e606d5f1bada1f2d21faeedd3fa2cf2dca7b274c
+ * src/sexp.c (do_vsexp_sscan): Return error for invalid args.
+
+ cipher: Fix a segv in case of calling with wrong parameters.
+ + commit f850add813d783f31ca6a60459dea25ef71bce7e
+ * cipher/md.c (_gcry_md_info): Fix arg testing.
+
+ cipher: Fix possible NULL deref in call to prime generator.
+ + commit 18056ace7f466cb8c1eaf08e5dc0400516d83b4c
+ * cipher/primegen.c (_gcry_generate_elg_prime): Change to return an
+ error code.
+ * cipher/dsa.c (generate): Take care of new return code.
+ * cipher/elgamal.c (generate): Change to return an error code. Take
+ care of _gcry_generate_elg_prime return code.
+ (generate_using_x): Take care of _gcry_generate_elg_prime return code.
+ (elg_generate): Propagate return code from generate.
+
+2014-08-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Support Montgomery curve for gcry_mpi_ec_mul_point.
+ + commit 34bb55ee36df3aca3ebca88f8b61c786cd0c0701
+ * mpi/ec.c (_gcry_mpi_ec_get_affine): Support Montgomery curve.
+ (montgomery_ladder): New.
+ (_gcry_mpi_ec_mul_point): Implemention using montgomery_ladder.
+ (_gcry_mpi_ec_curve_point): Check x-coordinate is valid.
+
+2014-08-09 Werner Koch <wk@gnupg.org>
+
+ tests: Add a benchmark for Elgamal.
+ + commit e6d354865bf8f3d4c1bb5e8157a76fdd442cff41
+ * tests/benchmark.c (sample_public_elg_key_1024): New.
+ (sample_private_elg_key_1024): New.
+ (sample_public_elg_key_2048, sample_private_elg_key_2048): New.
+ (sample_public_elg_key_3072, sample_private_elg_key_3072): New.
+ (elg_bench): New.
+ (main): Add elg_bench. Add commands "elg" and "public".
+
+2014-08-08 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Add cofactor to domain parameters.
+ + commit 9933b9e5e1a3f5b1019c75f93bd265d4a1ecc270
+ * src/ec-context.h (mpi_ec_ctx_s): Add cofactor 'h'.
+ * cipher/ecc-common.h (elliptic_curve_t): Add cofactor 'h'.
+ (_gcry_ecc_update_curve_param): New API adding cofactor.
+
+ * cipher/ecc-curves.c (ecc_domain_parms_t): Add cofactor 'h'.
+ (ecc_domain_parms_t domain_parms): Add cofactors.
+ (_gcry_ecc_fill_in_curve, _gcry_ecc_update_curve_param)
+ (_gcry_ecc_get_curve, _gcry_mpi_ec_new, _gcry_ecc_get_param_sexp)
+ (_gcry_ecc_get_mpi): Handle cofactor.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Likewise.
+ * cipher/ecc-misc.c (_gcry_ecc_curve_free)
+ (_gcry_ecc_curve_copy): Likewise.
+ * cipher/ecc.c (nist_generate_key, ecc_generate)
+ (ecc_check_secret_key, ecc_sign, ecc_verify, ecc_encrypt_raw)
+ (ecc_decrypt_raw, _gcry_pk_ecc_get_sexp, _gcry_pubkey_spec_ecc):
+ Likewise.
+ (compute_keygrip): Handle cofactor, but skip it for its computation.
+ * mpi/ec.c (ec_deinit): Likewise.
+ * tests/t-mpi-point.c (context_param): Likewise.
+ (test_curve): Add cofactors.
+ * tests/curves.c (sample_key_1, sample_key_2): Add cofactors.
+ * tests/keygrip.c (key_grips): Add cofactors.
+
+2014-08-05 Werner Koch <wk@gnupg.org>
+
+ mpi: Fix regression for powerpc-apple-darwin detection.
+ + commit 4ce77b0a810d3c889c07dfb385127d90fa1ae36a
+ * mpi/config.links: Add separate entry for powerpc-apple-darwin.
+
+ Fix bug inhibiting the use of the sentinel attribute.
+ + commit d2d28298ccc0d0f3c0b03fd323deb1e8808ef74f
+ * src/gcrypt.h.in: Fix typo in macro.
+
+ mpi: Use BSD syntax for x86_64-apple-darwin.
+ + commit 71939faa7c54e7b4b28d115e748a85f134876a02
+ * mpi/config.links: Add case for x86_64-apple-darwin.
+
+2014-08-05 Kristian Fiskerstrand <kf@sumptuouscapital.com>
+
+ Fix building for the x32 target without asm modules.
+ + commit a17c29844b63e9e869f7855d901bc9d859234ead
+ * mpi/generic/mpi-asm-defs.h: Use a fixed value for the x32 ABI.
+
+2014-07-25 Werner Koch <wk@gnupg.org>
+
+ ecc: Support the non-standard 0x40 compression flag for EdDSA.
+ + commit 4556f9b19c024f16bdf542da7173395c0741b91d
+ * cipher/ecc.c (ecc_generate): Check the "comp" flag for EdDSA.
+ * cipher/ecc-eddsa.c (eddsa_encode_x_y): Add arg WITH_PREFIX.
+ (_gcry_ecc_eddsa_encodepoint): Ditto.
+ (_gcry_ecc_eddsa_ensure_compact): Handle the 0x40 compression prefix.
+ (_gcry_ecc_eddsa_decodepoint): Ditto.
+ * tests/keygrip.c: Check an compresssed with prefix Ed25519 key.
+ * tests/t-ed25519.inp: Ditto.
+
+ mpi: Extend the internal mpi_get_buffer.
+ + commit 0e10902ad7584277ac966367efc712b183784532
+ * mpi/mpicoder.c (do_get_buffer): Add arg EXTRAALLOC.
+ (_gcry_mpi_get_buffer_extra): New.
+
+ cipher: Fix compiler warning for chacha20.
+ + commit 4e0bf1b9190ce08fb23eb3ae0c3be58954ff36ab
+ * cipher/chacha20.c (chacha20_blocks) [!USE_SSE2]: Do not build.
+
+2014-07-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: Add mpi_swap_cond.
+ + commit 4846e52728970e3117f3a046ef9010be089a3ae4
+ * mpi/mpiutil.c (_gcry_mpi_swap_cond): New.
+ * src/mpi.h (mpi_swap_cond): New.
+
+2014-06-29 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Speed-up SHA-1 NEON assembly implementation.
+ + commit 1b9b00bbe41bbed32563f1102049521e703e72bd
+ * cipher/sha1-armv7-neon.S: Tweak implementation for speed-up.
+
+2014-06-28 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ gostr3411_94: rewrite to use u32 mathematic.
+ + commit 066f068bd0bc4d8e01f1f18b6153cdc8d2c245d7
+ * cipher/gost28147.c (_gcry_gost_enc_data): New.
+ * cipher/gostr3411-94.c: Rewrite implementation to use u32 mathematic
+ internally.
+ * cipher/gost28147.c (_gcry_gost_enc_one): Remove.
+
+ gost28147: use bufhelp helpers.
+ + commit 7aeba6c449169926076df83b01ddbfa6b41fe411
+ * cipher/gost28147.c (gost_setkey, gost_encrypt_block, gost_decrypt_block):
+ use buf_get_le32/buf_put_le32 helpers.
+
+ Fixup curve name in the GOST2012 test case.
+ + commit b78d504fa8745b8b04589acbbcf7dd5fe9279d13
+ * tests/basic.c (check_pubkey): fixup curve name in public key.
+
+ Update PBKDF2 tests with GOST R 34.11-94 test cases.
+ + commit 7533b2ad46f42e98d9dba52e88e79c0311d2d3b7
+ * tests/t-kdf.c (check_pbkdf2): Add MD_GOSTR3411_CP test cases.
+
+ Add GOST R 34.11-94 variant using id-GostR3411-94-CryptoProParamSet.
+ + commit 25d6af77e2336b5979ddbe8b90978fe5b61dfaf9
+ * src/gcrypt.h.in (GCRY_MD_GOSTR3411_CP): New.
+ * src/cipher.h (_gcry_digest_spec_gost3411_cp): New.
+ * cipher/gost28147.c (_gcry_gost_enc_one): Differentiate between
+ CryptoPro and Test S-Boxes.
+ * cipher/gostr3411-94.c (_gcry_digest_spec_gost3411_cp,
+ gost3411_cp_init): New.
+ * cipher/md.c (md_open): GCRY_MD_GOSTR3411_CP also uses B=32.
+
+ gost28147: support GCRYCTL_SET_SBOX.
+ + commit 5ee35a04362c94e680ef3633fa83b72e0aee8626
+ cipher/gost28147.c (gost_set_extra_info, gost_set_sbox): New.
+
+ Support setting s-box for the ciphers that require it.
+ + commit fb074d113fcbf66a5c20592625cb19051f3430f5
+ * src/gcrypt.h.in (GCRYCTL_SET_SBOX, gcry_cipher_set_sbox): New.
+ * cipher/cipher.c (_gcry_cipher_ctl): pass GCRYCTL_SET_SBOX to
+ set_extra_info callback.
+
+ cipher/gost28147: generate optimized s-boxes from compact ones.
+ + commit 164738a0292b3f32c7747099ad9cadace58e5eda
+ * cipher/gost-s-box.c: New. Outputs optimized expanded representation of
+ s-boxes (4x256) from compact 16x8 representation.
+ * cipher/Makefile.am: Add gost-sb.h dependency to gost28147.lo
+ * cipher/gost.h: Add sbox to the GOST28147_context structure.
+ * cipher/gost28147.c (gost_setkey): Set default s-box to test s-box from
+ GOST R 34.11 (this was the only one S-box before).
+ * cipher/gost28147.c (gost_val): Use sbox from the context.
+
+ gost28147: add OIDs used to define cipher mode.
+ + commit 34a58010000288515636706811c3837f32957b2e
+ * cipher/gost28147 (oids_gost28147): Add OID from RFC4357.
+
+ GOST R 34.11-94 add OIDs.
+ + commit 8b221cf5ce233c8c49a4e4ecebb70d523fc37837
+ * cipher/gostr3411-94.c: Add OIDs for GOST R 34.11-94 from RFC 4357.
+
+2014-05-21 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ tests: add larger test-vectors for hash algorithms.
+ + commit f14fb5b427b5159fcd9603d2b3cde936889cf430
+ * tests/basic.c (check_digests): Add large test-vectors for MD5, SHA1,
+ SHA224, SHA256, SHA384, RMD160, CRC32, TIGER1, WHIRLPOOL and
+ GOSTR3411_94.
+
+ sha512: fix ARM/NEON implementation.
+ + commit beb901575f0d6cd6a0a27506ebea9a725754d0cc
+ * cipher/sha512-armv7-neon.S
+ (_gcry_sha512_transform_armv7_neon): Byte-swap RW67q and RW1011q
+ correctly in multi-block loop.
+ * tests/basic.c (check_digests): Add large test vector for SHA512.
+
+2014-05-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix ARM assembly when building __PIC__
+ + commit 994c758d8f5471c7e9c38c2834742cca2502d35f
+ * cipher/camellia-arm.S (GET_DATA_POINTER): New.
+ (_gcry_camellia_arm_encrypt_block): Use GET_DATA_POINTER.
+ (_gcry_camellia_arm_decrypt_block): Ditto.
+ * cipher/cast5-arm.S (GET_DATA_POINTER): New.
+ (_gcry_cast5_arm_encrypt_block, _gcry_cast5_arm_decrypt_block)
+ (_gcry_cast5_arm_enc_blk2, _gcry_cast5_arm_dec_blk2): Use
+ GET_DATA_POINTER.
+ * cipher/rijndael-arm.S (GET_DATA_POINTER): New.
+ (_gcry_aes_arm_encrypt_block, _gcry_aes_arm_decrypt_block): Use
+ GET_DATA_POINTER.
+ * cipher/sha1-armv7-neon.S (GET_DATA_POINTER): New.
+ (.LK_VEC): Move from .text to .data section.
+ (_gcry_sha1_transform_armv7_neon): Use GET_DATA_POINTER.
+
+2014-05-17 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add Poly1305 to documentation.
+ + commit bf4943932dae95a0573b63bf32a9b9acd5a6ddf3
+ * doc/gcrypt.texi: Add documentation for Poly1305 MACs and AEAD mode.
+
+2014-05-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ chacha20: add SSE2/AMD64 optimized implementation.
+ + commit 323b1eb80ff3396d83fedbe5bba9a4e6c412d192
+ * cipher/Makefile.am: Add 'chacha20-sse2-amd64.S'.
+ * cipher/chacha20-sse2-amd64.S: New.
+ * cipher/chacha20.c (USE_SSE2): New.
+ [USE_SSE2] (_gcry_chacha20_amd64_sse2_blocks): New.
+ (chacha20_do_setkey) [USE_SSE2]: Use SSE2 implementation for blocks
+ function.
+ * configure.ac [host=x86-64]: Add 'chacha20-sse2-amd64.lo'.
+
+ poly1305: add AMD64/AVX2 optimized implementation.
+ + commit 98f021961ee65669037bc8bb552a69fd78f610fc
+ * cipher/Makefile.am: Add 'poly1305-avx2-amd64.S'.
+ * cipher/poly1305-avx2-amd64.S: New.
+ * cipher/poly1305-internal.h (POLY1305_USE_AVX2)
+ (POLY1305_AVX2_BLOCKSIZE, POLY1305_AVX2_STATESIZE)
+ (POLY1305_AVX2_ALIGNMENT): New.
+ (POLY1305_LARGEST_BLOCKSIZE, POLY1305_LARGEST_STATESIZE)
+ (POLY1305_STATE_ALIGNMENT): Use AVX2 versions when needed.
+ * cipher/poly1305.c [POLY1305_USE_AVX2]
+ (_gcry_poly1305_amd64_avx2_init_ext)
+ (_gcry_poly1305_amd64_avx2_finish_ext)
+ (_gcry_poly1305_amd64_avx2_blocks, poly1305_amd64_avx2_ops): New.
+ (_gcry_poly1305_init) [POLY1305_USE_AVX2]: Use AVX2 implementation if
+ AVX2 supported by CPU.
+ * configure.ac [host=x86_64]: Add 'poly1305-avx2-amd64.lo'.
+
+2014-05-12 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ poly1305: add AMD64/SSE2 optimized implementation.
+ + commit 297532602ed2d881d8fdc393d1961068a143a891
+ * cipher/Makefile.am: Add 'poly1305-sse2-amd64.S'.
+ * cipher/poly1305-internal.h (POLY1305_USE_SSE2)
+ (POLY1305_SSE2_BLOCKSIZE, POLY1305_SSE2_STATESIZE)
+ (POLY1305_SSE2_ALIGNMENT): New.
+ (POLY1305_LARGEST_BLOCKSIZE, POLY1305_LARGEST_STATESIZE)
+ (POLY1305_STATE_ALIGNMENT): Use SSE2 versions when needed.
+ * cipher/poly1305-sse2-amd64.S: New.
+ * cipher/poly1305.c [POLY1305_USE_SSE2]
+ (_gcry_poly1305_amd64_sse2_init_ext)
+ (_gcry_poly1305_amd64_sse2_finish_ext)
+ (_gcry_poly1305_amd64_sse2_blocks, poly1305_amd64_sse2_ops): New.
+ (_gcry_polu1305_init) [POLY1305_USE_SSE2]: Use SSE2 version.
+ * configure.ac [host=x86_64]: Add 'poly1305-sse2-amd64.lo'.
+
+ Add Poly1305 based cipher AEAD mode.
+ + commit e813958419b0ec4439e6caf07d3b2234cffa2bfa
+ * cipher/Makefile.am: Add 'cipher-poly1305.c'.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add 'u_mode.poly1305'.
+ (_gcry_cipher_poly1305_encrypt, _gcry_cipher_poly1305_decrypt)
+ (_gcry_cipher_poly1305_setiv, _gcry_cipher_poly1305_authenticate)
+ (_gcry_cipher_poly1305_get_tag, _gcry_cipher_poly1305_check_tag): New.
+ * cipher/cipher-poly1305.c: New.
+ * cipher/cipher.c (_gcry_cipher_open_internal, cipher_setkey)
+ (cipher_reset, cipher_encrypt, cipher_decrypt, _gcry_cipher_setiv)
+ (_gcry_cipher_authenticate, _gcry_cipher_gettag)
+ (_gcry_cipher_checktag): Handle 'GCRY_CIPHER_MODE_POLY1305'.
+ (cipher_setiv): Move handling of 'GCRY_CIPHER_MODE_GCM' to ...
+ (_gcry_cipher_setiv): ... here, as with other modes.
+ * src/gcrypt.h.in: Add 'GCRY_CIPHER_MODE_POLY1305'.
+ * tests/basic.c (_check_poly1305_cipher, check_poly1305_cipher): New.
+ (check_ciphers): Add Poly1305 check.
+ (check_cipher_modes): Call 'check_poly1305_cipher'.
+ * tests/bench-slope.c (bench_gcm_encrypt_do_bench): Rename to
+ bench_aead_... and take nonce as argument.
+ (bench_gcm_decrypt_do_bench, bench_gcm_authenticate_do_bench): Ditto.
+ (bench_gcm_encrypt_do_bench, bench_gcm_decrypt_do_bench)
+ (bench_gcm_authenticate_do_bench, bench_poly1305_encrypt_do_bench)
+ (bench_poly1305_decrypt_do_bench)
+ (bench_poly1305_authenticate_do_bench, poly1305_encrypt_ops)
+ (poly1305_decrypt_ops, poly1305_authenticate_ops): New.
+ (cipher_modes): Add Poly1305.
+ (cipher_bench_one): Add special handling for Poly1305.
+
+ Add Poly1305-AES (-Camellia, etc) MACs.
+ + commit 73b3b75c2221a6e3bed4117e0a206a1193acd2ed
+ * cipher/mac-internal.h (_gcry_mac_type_spec_poly1305_aes)
+ (_gcry_mac_type_spec_poly1305_camellia)
+ (_gcry_mac_type_spec_poly1305_twofish)
+ (_gcry_mac_type_spec_poly1305_serpent)
+ (_gcry_mac_type_spec_poly1305_seed): New.
+ * cipher/mac-poly1305.c (poly1305mac_context_s): Add 'hd' and
+ 'nonce_set'.
+ (poly1305mac_open, poly1305mac_close, poly1305mac_setkey): Add handling
+ for Poly1305-*** MACs.
+ (poly1305mac_prepare_key, poly1305mac_setiv): New.
+ (poly1305mac_reset, poly1305mac_write, poly1305mac_read): Add handling
+ for 'nonce_set'.
+ (poly1305mac_ops): Add 'poly1305mac_setiv'.
+ (_gcry_mac_type_spec_poly1305_aes)
+ (_gcry_mac_type_spec_poly1305_camellia)
+ (_gcry_mac_type_spec_poly1305_twofish)
+ (_gcry_mac_type_spec_poly1305_serpent)
+ (_gcry_mac_type_spec_poly1305_seed): New.
+ * cipher/mac.c (mac_list): Add Poly1305-AES, Poly1305-Twofish,
+ Poly1305-Serpent, Poly1305-SEED and Poly1305-Camellia.
+ * src/gcrypt.h.in: Add 'GCRY_MAC_POLY1305_AES',
+ 'GCRY_MAC_POLY1305_CAMELLIA', 'GCRY_MAC_POLY1305_TWOFISH',
+ 'GCRY_MAC_POLY1305_SERPENT' and 'GCRY_MAC_POLY1305_SEED'.
+ * tests/basic.c (check_mac): Add Poly1305-AES test vectors.
+ * tests/bench-slope.c (bench_mac_init): Set IV for Poly1305-*** MACs.
+ * tests/bench-slope.c (mac_bench): Set IV for Poly1305-*** MACs.
+
+ Add Poly1305 MAC.
+ + commit b8794fed68ebe7567f4617141f0996ad290d9120
+ * cipher/Makefile.am: Add 'mac-poly1305.c', 'poly1305.c' and
+ 'poly1305-internal.h'.
+ * cipher/mac-internal.h (poly1305mac_context_s): New.
+ (gcry_mac_handle): Add 'u.poly1305mac'.
+ (_gcry_mac_type_spec_poly1305mac): New.
+ * cipher/mac-poly1305.c: New.
+ * cipher/mac.c (mac_list): Add Poly1305.
+ * cipher/poly1305-internal.h: New.
+ * cipher/poly1305.c: New.
+ * src/gcrypt.h.in: Add 'GCRY_MAC_POLY1305'.
+ * tests/basic.c (check_mac): Add Poly1035 test vectors; Allow
+ overriding lengths of data and key buffers.
+ * tests/bench-slope.c (mac_bench): Increase max algo number from 500 to
+ 600.
+ * tests/benchmark.c (mac_bench): Ditto.
+
+ chacha20/AVX2: clear upper-halfs of YMM registers on entry.
+ + commit c20daeeb05329bfc6cc2c562cbd4b965291fe0e1
+ * cipher/chacha20-avx2-amd64.S (_gcry_chacha20_amd64_avx2_blocks): Add
+ 'vzeroupper' at beginning.
+
+ chacha20/AVX2: check for ENABLE_AVX2_SUPPORT instead of HAVE_GCC_INLINE_ASM_AVX2
+ + commit a3062db748f272e0f7346e1ed9e0bf7ed61a4eae
+ * cipher/chacha20.c (USE_AVX2): Enable depending on
+ ENABLE_AVX2_SUPPORT, not HAVE_GCC_INLINE_ASM_AVX2.
+ * cipher/chacha20-avx2-amd64.S: Ditto.
+
+ chacha20/SSSE3: clear XMM registers after use.
+ + commit a7d9eeeba632b7eb4a5b15ff17f6565181642f3c
+ * cipher/chacha20-ssse3-amd64.S (_gcry_chacha20_amd64_ssse3_blocks): On
+ return, clear XMM registers.
+
+2014-05-11 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ chacha20: add AVX2/AMD64 assembly implementation.
+ + commit a39ee7555691d18cae97560f130aaf952bfbd278
+ * cipher/Makefile.am: Add 'chacha20-avx2-amd64.S'.
+ * cipher/chacha20-avx2-amd64.S: New.
+ * cipher/chacha20.c (USE_AVX2): New macro.
+ [USE_AVX2] (_gcry_chacha20_amd64_avx2_blocks): New.
+ (chacha20_do_setkey): Select AVX2 implementation if there is HW
+ support.
+ (selftest): Increase size of buf by 256.
+ * configure.ac [host=x86-64]: Add 'chacha20-avx2-amd64.lo'.
+
+ chacha20: add SSSE3 assembly implementation.
+ + commit def7d4cad386271c6d4e2f10aabe0cb4abd871e4
+ * cipher/Makefile.am: Add 'chacha20-ssse3-amd64.S'.
+ * cipher/chacha20-ssse3-amd64.S: New.
+ * cipher/chacha20.c (USE_SSSE3): New macro.
+ [USE_SSSE3] (_gcry_chacha20_amd64_ssse3_blocks): New.
+ (chacha20_do_setkey): Select SSSE3 implementation if there is HW
+ support.
+ * configure.ac [host=x86-64]: Add 'chacha20-ssse3-amd64.lo'.
+
+ Add ChaCha20 stream cipher.
+ + commit 23f33d57c9b6f2295a8ddfc9a8eee5a2c30cf406
+ * cipher/Makefile.am: Add 'chacha20.c'.
+ * cipher/chacha20.c: New.
+ * cipher/cipher.c (cipher_list): Add ChaCha20.
+ * configure.ac: Add ChaCha20.
+ * doc/gcrypt.texi: Add ChaCha20.
+ * src/cipher.h (_gcry_cipher_spec_chacha20): New.
+ * src/gcrypt.h.in (GCRY_CIPHER_CHACHA20): Add new algo.
+ * tests/basic.c (MAX_DATA_LEN): Increase to 128 from 100.
+ (check_stream_cipher): Add ChaCha20 test-vectors.
+ (check_ciphers): Add ChaCha20.
+
+2014-05-09 Werner Koch <wk@gnupg.org>
+
+ mpi: Fix a subtle bug setting spurious bits with in mpi_set_bit.
+ + commit 246b7aaae1ee459f440260bbc4ec2c01c5dc3362
+ * mpi/mpi-bit.c (_gcry_mpi_set_bit, _gcry_mpi_set_highbit): Clear
+ allocated but not used bits before resizing.
+ * tests/t-mpi-bits.c (set_bit_with_resize): New.
+
+2014-05-07 Werner Koch <wk@gnupg.org>
+
+ Bump LT version.
+ + commit fc6ff6f73a51bcbbbb3757dc1386da40aa3ae75d
+ * configure.ac: Bumb LT version to C21/A1/R0.
+
+2014-04-22 Werner Koch <wk@gnupg.org>
+
+ random: Small patch for consistency and really burn the stack.
+ + commit a79c4ad7c56ee4410f17beb73eeb58b0dd36bfc6
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): s/int/size_t/.
+ (_gcry_rndlinux_gather_random): Replace memset by wipememory.
+
+2014-04-16 Werner Koch <wk@gnupg.org>
+
+ pubkey: Re-map all depreccated RSA algo numbers.
+ + commit 773e23698218755e9172d2507031a8263c47cc0b
+ * cipher/pubkey.c (map_algo): Mape RSA_E and RSA_S.
+
+2014-04-15 Werner Koch <wk@gnupg.org>
+
+ cipher: Fix possible NULL dereference.
+ + commit ae1fbce6dacf14747af0126e640bd4e54cb8c680
+ * cipher/md.c (_gcry_md_selftest): Check for spec being NULL.
+
+2014-03-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ 3des: add amd64 assembly implementation for 3DES.
+ + commit b76b632a453b8d100d024e2439b4358454dc286e
+ * cipher/Makefile.am: Add 'des-amd64.S'.
+ * cipher/cipher-selftests.c (_gcry_selftest_helper_cbc)
+ (_gcry_selftest_helper_cfb, _gcry_selftest_helper_ctr): Handle failures
+ from 'setkey' function.
+ * cipher/cipher.c (_gcry_cipher_open_internal) [USE_DES]: Setup bulk
+ functions for 3DES.
+ * cipher/des-amd64.S: New file.
+ * cipher/des.c (USE_AMD64_ASM, ATTR_ALIGNED_16): New macros.
+ [USE_AMD64_ASM] (_gcry_3des_amd64_crypt_block)
+ (_gcry_3des_amd64_ctr_enc), _gcry_3des_amd64_cbc_dec)
+ (_gcry_3des_amd64_cfb_dec): New prototypes.
+ [USE_AMD64_ASM] (tripledes_ecb_crypt): New function.
+ (TRIPLEDES_ECB_BURN_STACK): New macro.
+ (_gcry_3des_ctr_enc, _gcry_3des_cbc_dec, _gcry_3des_cfb_dec)
+ (bulk_selftest_setkey, selftest_ctr, selftest_cbc, selftest_cfb): New
+ functions.
+ (selftest): Add call to CTR, CBC and CFB selftest functions.
+ (do_tripledes_encrypt, do_tripledes_decrypt): Use
+ TRIPLEDES_ECB_BURN_STACK.
+ * configure.ac [host=x86-64]: Add 'des-amd64.lo'.
+ * src/cipher.h (_gcry_3des_ctr_enc, _gcry_3des_cbc_dec)
+ (_gcry_3des_cfb_dec): New prototypes.
+
+2014-03-13 Werner Koch <wk@gnupg.org>
+
+ tests: Print diagnostics for skipped tests.
+ + commit 50aeee51a0b1a09dd9fff2bb71749a816fe7a791
+ * tests/basic.c (show_note): New.
+ (show_md_not_available):
+ (show_old_hmac_not_available):
+ (show_mac_not_available):
+ (check_digests): Remove USE_foo cpp tests from the test table. Call
+ show_md_not_available if algo is not available.
+ (check_hmac): Likewise.
+ (check_mac): Likewise.
+
+2014-03-11 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Add MD2 message digest implementation.
+ + commit 5a8e1504bf8a2ffbc018be576dea77b685200444
+ * cipher/md2.c: New.
+ * cipher/md.c (digest_list): add _gcry_digest_spec_md2.
+ * tests/basic.c (check_digests): add MD2 test vectors.
+ * configure.ac (default_digests): disable md2 by default.
+
+2014-03-04 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Add an utility to calculate hashes over a set of files.
+ + commit 2b5403c408dfbd71be24c7635f5fa0b61ab4c9bb
+ * tests/gchash.c: New.
+
+ Add a simple (raw) PKCS#1 padding mode.
+ + commit ea8d597726305274214224757b32730644e12bd8
+ * src/cipher.h (PUBKEY_ENC_PKCS1_RAW): New.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Handle pkcs1-raw
+ flag.
+ * cipher/pubkey-util.c (_gcry_pk_util_data_to_mpi):
+ Handle s-exp like (data (flags pkcs1-raw) (value xxxxx))
+ * cipher/rsa-common.c (_gcry_rsa_pkcs1_encode_raw_for_sig):
+ PKCS#1-encode data with embedded hash OID for signature verification.
+ * tests/basic.c (check_pubkey_sign): Add tests for s-exps with pkcs1-raw
+ flag.
+
+2014-02-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix ARMv6 detection when CFLAGS modify target CPU architecture.
+ + commit 6be3032048ee2466511d2384fcf2d28b856219b2
+ * configure.ac (gcry_cv_cc_arm_arch_is_v6): Use compiler test instead
+ of preprocessor test.
+
+2014-01-29 Werner Koch <wk@gnupg.org>
+
+ Reserve control code for FIPS extensions.
+ + commit aea96a64fbc58a0b6f9f435e97e93294c6eb1052
+ * src/gcrypt.h.in (GCRYCTL_INACTIVATE_FIPS_FLAG): New.
+ (GCRYCTL_REACTIVATE_FIPS_FLAG): New.
+ * src/global.c (_gcry_vcontrol): Add them but return not_implemented.
+
+2014-01-29 NIIBE Yutaka <gniibe@fsij.org>
+
+ Fix RSA Blinding.
+ + commit 121a90d8931944974054f7d94f63b7f89df87fa5
+ * cipher/rsa.c (rsa_decrypt): Loop to get multiplicative inverse.
+
+2014-01-28 Werner Koch <wk@gnupg.org>
+
+ cipher: Take care of ENABLE_NEON_SUPPORT.
+ + commit 52f7c48c901a3de51bd690a218f3de2f71e8d790
+ * cipher/salsa20.c (USE_ARM_NEON_ASM): Define only if
+ ENABLE_NEON_SUPPORT is defined.
+ * cipher/serpent.c (USE_NEON): Ditto.
+ * cipher/sha1.c (USE_NEON): Ditto.
+ * cipher/sha512.c (USE_ARM_NEON_ASM): Ditto.
+
+ sexp: Fix broken gcry_sexp_nth.
+ + commit cbdc355415f83ed62da4f3618767eba54d7e6d37
+ * src/sexp.c (_gcry_sexp_nth): Return a valid S-expression for a data
+ element.
+ (NODE): Remove unused typedef.
+ (ST_HINT): Comment unused macro.
+
+ * tests/t-sexp.c (bug_1594): New.
+ (main): Run new test.
+
+2014-01-27 Werner Koch <wk@gnupg.org>
+
+ tests: Improve t-common.h.
+ + commit 7460e9243b3cc050631c37ed4f2713ae7bcb6762
+ * tests/t-common.h: Add couple of macros. Check that config.h has
+ been included.
+ (show): Rename to info.
+ * tests/t-lock.c, tests/t-sexp.c: Adjust for changes.
+
+ mpi: Minor fix for Atari-mint.
+ + commit 3caa0f1319dc4779e0d6eee4460c1af2a12b2c3c
+ * mpi/config.links [m68k-atari-mint]: Do not assume 68020. Suggested
+ by Alan Hourihane.
+
+ (cherry picked from commit 420f42a5752e90a8b27d58ffa1ddfe6e4ab341e8)
+
+2014-01-27 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Fix most of memory leaks in tests code.
+ + commit 5c150ece094bf0a504a111ce6c7b72e8d0b0457a
+ * tests/basic.c (check_ccm_cipher): Close cipher after use.
+ * tests/basic.c (check_one_cipher): Correct length of used buffer.
+ * tests/benchmark.c (cipher_bench): Use xcalloc to make buffer
+ initialized.
+ * tests/keygen.c (check_ecc_keys): Release generated key.
+ * tests/t-mpi-point.c (context_param): Release mpi Q.
+ * tests/t-sexp.c (check_extract_param): Release extracted number.
+
+ Fix memory leaks in ecc code.
+ + commit 6d87e6abdfb7552323a95401f14e6367398a3e5a
+ * cipher/ecc-curves.c (_gcry_ecc_update_curve_param): Release passed mpi
+ values.
+ * cipher/ecc.c (compute_keygrip): Fix potential memory leak in error
+ path.
+ * cipher/ecc.c (_gcry_ecc_get_curve): Release temporary mpi.
+
+ Fix number of blocks passed used in _gcry_rmd160_mixblock.
+ + commit 5d23e7b9a77421f3ebfda4a84c459a8729f3bb41
+ * cipher/rmd160.c (_gcry_rmd160_mixblock): pass 1 to transform
+
+2014-01-27 Werner Koch <wk@gnupg.org>
+
+ Small Windows build tweaks.
+ + commit f7df906171854b6b6506b82d4fee2c2ebb0327ea
+ * configure.ac (HAVE_PTHREAD): Do test when building for Windows.
+
+ * tests/basic.c: Replace "%zi" by "%z" and a cast to make it work
+ under Windows.
+
+ Update gpg-error autoconf macros to fix threading problems.
+ + commit 79da0358fd555361e1ce4202f55494a8918eb8ae
+ * m4/gpg-error.m4: Update to version 2014-01-24.
+ * tests/Makefile.am (t_lock_LDADD): Use MT Libs.
+
+2014-01-24 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ tests: Pass -no-install to libtool.
+ + commit bf34bfa5c458ee5ece91f25e3b4194d768498ab6
+ * tests/Makefile.am: add AM_LDFLAGS = -no-install
+
+2014-01-24 Werner Koch <wk@gnupg.org>
+
+ tests: Add a test for the internal locking.
+ + commit ff91ec934ed52294cddcd7dcfacc04721a0487bf
+ * src/global.c (external_lock_test): New.
+ (_gcry_vcontrol): Call new function with formerly reserved code 61.
+
+ * tests/t-common.h: New. Taken from current libgpg-error.
+ * tests/t-lock.c: New. Based on t-lock.c from libgpg-error.
+ * configure.ac (HAVE_PTHREAD): Set macro to 1 if defined.
+ (AC_CHECK_FUNCS): Check for flockfile.
+ * tests/Makefile.am (tests_bin): Add t-lock.
+ (noinst_HEADERS): Add t-common.h
+ (LDADD): Move value to ...
+ (default_ldadd): new.
+ (t_lock_LDADD): New.
+
+ Check compiler features only for the relevant platform.
+ + commit 24e65d715812cea28732397870cb1585b8435521
+ * mpi/config.links (mpi_cpu_arch): Always set for ARM. Set for HPPA.
+ Set to "undefined" for unknown platforms.
+ (try_asm_modules): Act upon only after having detected the CPU.
+ * configure.ac: Move the call to config.links before the platform
+ specific compiler checks. Check platform specific features only if
+ the platform is targeted.
+
+2014-01-23 Werner Koch <wk@gnupg.org>
+
+ Support building using the latest mingw-w64 toolchain.
+ + commit 4ad3417acab5021db1f722c314314ce4b781833a
+ * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Change mingw detection.
+
+2014-01-20 Werner Koch <wk@gnupg.org>
+
+ cipher: Fix commit 94030e44.
+ + commit dad06e4d1b835bac778b87090b1d3894b7535b14
+ * cipher/tiger.c (tiger_init): Add arg FLAGS.
+ (tiger1_init, tiger2_init): Ditto.
+
+ tests: Rename tsexp.c.
+ + commit 192e77d123fdb04c459c998b9eb1731618a833fa
+ * tests/tsexp.c: Rename to t-sexp.c
+
+2014-01-19 Werner Koch <wk@gnupg.org>
+
+ md: Add Whirlpool bug emulation feature.
+ + commit 94030e44aaff805d754e368507f16dd51a531b72
+ * src/gcrypt.h.in (GCRY_MD_FLAG_BUGEMU1): New.
+ * src/cipher-proto.h (gcry_md_init_t): Add arg FLAGS. Change all code
+ to implement that flag.
+ * cipher/md.c (gcry_md_context): Replace SECURE and FINALIZED by bit
+ field FLAGS. Add flag BUGEMU1. Change all users.
+ (md_open): Replace args SECURE and HMAC by FLAGS. Init flags.bugemu1.
+ (_gcry_md_open): Add for GCRY_MD_FLAG_BUGEMU1.
+ (md_enable): Pass bugemu1 flag to the hash init function.
+ (_gcry_md_reset): Ditto.
+
+2014-01-17 Werner Koch <wk@gnupg.org>
+
+ Actually check for uint64_t.
+ + commit c3b30bae7d1e157f8b65e32ba1b3a516f2bbf58b
+ * configure.ac: Check size of uint64_t and the UINT64_C macro.
+
+2014-01-16 Werner Koch <wk@gnupg.org>
+
+ Replace ath based mutexes by gpgrt based locks.
+ + commit cfc151ba637200e4fc05d9481a8df2071b2f9a47
+ * configure.ac (NEED_GPG_ERROR_VERSION): Require 1.13.
+ (gl_LOCK): Remove.
+ * src/ath.c, src/ath.h: Remove. Remove from all files. Replace all
+ mutexes by gpgrt based statically initialized locks.
+ * src/global.c (global_init): Remove ath_init.
+ (_gcry_vcontrol): Make ath install a dummy function.
+ (print_config): Remove threads info line.
+
+ * doc/gcrypt.texi: Simplify the multi-thread related documentation.
+
+2014-01-15 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Fix _gcry_mpi_ec_p_new to allow secp256k1.
+ + commit 49edeebb43174865cf4fa2c170a42a8e4274c4f0
+ * mpi/ec.c (_gcry_mpi_ec_p_new): Remove checking a!=0.
+ * tests/t-mpi-point.c (context_alloc): Remove two spurious tests.
+
+2014-01-14 Milan Broz <gmazyland@gmail.com>
+
+ PBKDF2: Use gcry_md_reset to speed up calculation.
+ + commit 04cda6b7cc16f3f52c12d9d3e46c56701003496e
+ * cipher/kdf.c (_gcry_kdf_pkdf2): Use gcry_md_reset
+ to speed up calculation.
+
+2014-01-13 Werner Koch <wk@gnupg.org>
+
+ Fix macro conflict in NetBSD.
+ + commit 5f2af6c26bc04975c0b518881532871d7387d7ce
+ * cipher/bithelp.h (bswap32): Rename to _gcry_bswap32.
+ (bswap64): Rename to _gcry_bswap64.
+
+ Use internal malloc function in fips.c.
+ + commit 518ae274a1845ce626b2b4223a9b3805cbbab1a7
+ * src/fips.c (check_binary_integrity): s/gcry_malloc/xtrymalloc/.
+
+2014-01-13 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Truncate hash values for ECDSA signature scheme.
+ + commit 9edcf1090e0485f9f383b6c54b18ea8ca3d4a225
+ * cipher/dsa-common (_gcry_dsa_normalize_hash): New. Truncate opaque
+ mpis as required for DSA and ECDSA signature schemas.
+ * cipher/dsa.c (verify): Return gpg_err_code_t value from verify() to
+ behave like the rest of internal sign/verify functions.
+ * cipher/dsa.c (sign, verify, dsa_verify): Factor out hash truncation.
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_sign): Factor out hash truncation.
+ * cipher/ecc-ecdsa.c (_gcry_ecc_ecdsa_verify):
+ as required by ECDSA scheme, truncate hash values to bitlength of
+ used curve.
+ * tests/pubkey.c (check_ecc_sample_key): add a testcase for hash
+ truncation.
+
+ Add GOST R 34.10-2012 curves proposed by TC26.
+ + commit 2c5ec803100ed8261e51442fb93b75367b7725ea
+ * cipher/ecc-curves.c (domain_parmss): Add two GOST R 34.10-2012 curves
+ proposed/pending to standardization by TC26 (Russian cryptography
+ technical comitee).
+ * cipher/ecc-curves.c (curve_alias): Add OID aliases.
+ * tests/curves.c: Increase N_CURVES.
+
+ Add GOST R 34.10-2001 curves per RFC4357.
+ + commit 9bedc5c3b646dfe481678ca58f5466ac46decaf7
+ * cipher/ecc-curves.c (domain_parms): Add 3 curves defined in rfc4357.
+ * cipher/ecc-curves.c (curve_aliases): Add OID and Xch aliases for GOST
+ curves.
+ * tests/curves.c (N_CURVES): Update value.
+
+ Fix typo in search_oid.
+ + commit 7edcb574d8d6dffb6e234c2ba1996a9a04923859
+ * cipher/md.c (search_oid): Invert condition on oid comparison.
+
+ Add MD2-HMAC calculation support.
+ + commit 653b58cb5e85511b6c04c3f85ef3e372c2e9f74f
+ * src/gcrypt.h.in (GCRY_MAC_HMAC_MD2): New.
+ * cipher/mac-hmac.c: Support GCRY_MAC_HMAC_MD2.
+
+ Add a function to retrieve algorithm used by MAC handler.
+ + commit 8439a379c86ef1088465ea70ac10840759a1638e
+ * cipher/mac.c (_gcry_mac_get_algo): New function, returns used algo.
+ * src/visibility.c (gcry_mac_get_algo): New wrapper.
+ * src/visibility.h: Hanlde gcry_mac_get_algo.
+ * src/gcrypt-int.h (_gcry_mac_get_algo): New.
+ * src/gcrypt.h.in (gcry_mac_get_algo): New.
+ * src/libgcrypt.def (gcry_mac_get_algo): New.
+ * src/libgcrypt.vers (gcry_mac_get_algo): New.
+ * doc/gcrypt.texi: Document gcry_mac_get_algo.
+ * tests/basic.c (check_one_mac): Verify gcry_mac_get_algo.
+
+ Correct formatting of gcry_mac_get_algo_keylen documentation.
+ + commit 36c9e0e4eb4f935da90df1c8df484d1940bda5eb
+ * doc/gcrypt.texi: add braces near gcry_mac_get_algo_keylen
+ documentation.
+
+ Use braces around unsigned int in gcry_mac_get_algo_keylen
+ documentation, otherwise texinfo breaks that and uses 'int' as a
+ function definition.
+
+2014-01-13 Werner Koch <wk@gnupg.org>
+
+ ecc: Make a macro shorter.
+ + commit 2ef48ba59c32bfa1a9265d5eea8ab225a658903a
+ * src/mpi.h (MPI_EC_TWISTEDEDWARDS): Rename to MPI_EC_EDWARDS. CHnage
+ all users.
+ * cipher/ecc-curves.c (domain_parms): Add parameters for Curve3617 as
+ comment.
+ * mpi/ec.c (dup_point_twistededwards): Rename to dup_point_edwards.
+ (add_points_twistededwards): Rename to add_points_edwards.
+
+2014-01-12 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix assembly division check.
+ + commit ef3e66e168c4b9b86bfc4903001631e53a7125d8
+ * configure.ac (gcry_cv_gcc_as_const_division_ok): Correct variable
+ name mismatch at '--Wa,--divide' workaround check.
+
+2014-01-12 NIIBE Yutaka <gniibe@fsij.org>
+
+ Add secp256k1 curve.
+ + commit 019e0e9e8c77a2edf283745e05e9301673ea6a0a
+ * cipher/ecc-curves.c (curve_aliases): Add secp256k1 and its OID.
+ (domain_parms): Add secp256k1's domain paramerter.
+
+ * tests/basic.c (check_pubkey): Add a key of secp256k1.
+
+ * tests/curves.c (N_CURVES): Updated.
+
+2014-01-12 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix constant division for AMD64 assembly on Solaris/x86.
+ + commit 43376891c01f4aff1fbfb23beafebb5adfd0868c
+ * configure.ac (gcry_cv_gcc_as_const_division_ok): Add new check for
+ constant division in assembly and test for "-Wa,--divide" workaround.
+ (gcry_cv_gcc_amd64_platform_as_ok): Check for also constant division.
+
+2014-01-10 Werner Koch <wk@gnupg.org>
+
+ Use the generic autogen.sh script.
+ + commit b0ac1f9b143aa15855914ba93fef900288d45c9c
+ * autogen.rc: New.
+ * Makefile.am (EXTRA_DIST): Add it.
+ * autogen.sh: Update from current GnuPG.
+
+ Move all helper scripts to build-aux/
+ + commit df9b4eabf52faee6f289a4bc62219684442ae383
+ * scripts/: Rename to build-aux/.
+ * compile, config.guess, config.rpath, config.sub
+ * depcomp, doc/mdate-sh, doc/texinfo.tex
+ * install-sh, ltmain.sh, missing: Move to build-aux/.
+ * Makefile.am (EXTRA_DIST): Adjust.
+ * configure.ac (AC_CONFIG_AUX_DIR): New.
+ (AM_SILENT_RULES): New.
+
+2013-12-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add blowfish/serpent ARM assembly files to Makefile.am.
+ + commit 7fef7f481c0a1542be34d1dc831f58d41846ac29
+ * cipher/Makefile.am: Add 'blowfish-arm.S' and 'serpent-armv7-neon.S'.
+
+ Add AMD64 assembly implementation for arcfour.
+ + commit 7547898109c72a97e3102b2a045ee4fdb2aa40bf
+ * cipher/Makefile.am: Add 'arcfour-amd64.S'.
+ * cipher/arcfour-amd64.S: New.
+ * cipher/arcfour.c (USE_AMD64_ASM): New.
+ [USE_AMD64_ASM] (ARCFOUR_context, _gcry_arcfour_amd64)
+ (encrypt_stream): New.
+ * configure.ac [host=x86_64]: Add 'arcfour-amd64.lo'.
+
+ Parse /proc/cpuinfo for ARM HW features.
+ + commit a05be441d8cd89b90d8d58e3a343a436dae377d0
+ * src/hwf-arm.c [__linux__] (HAS_PROC_CPUINFO)
+ (detect_arm_proc_cpuinfo): New.
+ (_gcry_hwf_detect_arm) [HAS_PROC_CPUINFO]: Check '/proc/cpuinfo' for
+ HW features.
+
+ Fix buggy/incomplete detection of AVX/AVX2 support.
+ + commit bbcb12187afb1756cb27296166b57fa19ee45d4d
+ * configure.ac: Also check for 'xgetbv' instruction in AVX and AVX2
+ inline assembly checks.
+ * src/hwf-x86.c [__i386__] (get_xgetbv): New function.
+ [__x86_64__] (get_xgetbv): New function.
+ [HAS_X86_CPUID] (detect_x86_gnuc): Check for OSXSAVE and OS support for
+ XMM&YMM registers and enable AVX/AVX2 only if XMM&YMM registers are
+ supported by OS.
+
+2013-12-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Change utf-8 copyright characters to '(C)'
+ + commit b7e814f93ee40fcfe17a187a8989c07fde2ba0cd
+ cipher/blowfish-amd64.S: Change utf-8 encoded copyright character to
+ '(C)'.
+ cipher/blowfish-arm.S: Ditto.
+ cipher/bufhelp.h: Ditto.
+ cipher/camellia-aesni-avx-amd64.S: Ditto.
+ cipher/camellia-aesni-avx2-amd64.S: Ditto.
+ cipher/camellia-arm.S: Ditto.
+ cipher/cast5-amd64.S: Ditto.
+ cipher/cast5-arm.S: Ditto.
+ cipher/cipher-ccm.c: Ditto.
+ cipher/cipher-cmac.c: Ditto.
+ cipher/cipher-gcm.c: Ditto.
+ cipher/cipher-selftest.c: Ditto.
+ cipher/cipher-selftest.h: Ditto.
+ cipher/mac-cmac.c: Ditto.
+ cipher/mac-gmac.c: Ditto.
+ cipher/mac-hmac.c: Ditto.
+ cipher/mac-internal.h: Ditto.
+ cipher/mac.c: Ditto.
+ cipher/rijndael-amd64.S: Ditto.
+ cipher/rijndael-arm.S: Ditto.
+ cipher/salsa20-amd64.S: Ditto.
+ cipher/salsa20-armv7-neon.S: Ditto.
+ cipher/serpent-armv7-neon.S: Ditto.
+ cipher/serpent-avx2-amd64.S: Ditto.
+ cipher/serpent-sse2-amd64.S: Ditto.
+
+ Add ARM/NEON implementation for SHA-1.
+ + commit fc7dcf616937afaf73cfda1bf7bd79566a96b130
+ * cipher/Makefile.am: Add 'sha1-armv7-neon.S'.
+ * cipher/sha1-armv7-neon.S: New.
+ * cipher/sha1.c (USE_NEON): New.
+ (SHA1_CONTEXT, sha1_init) [USE_NEON]: Add and initialize 'use_neon'.
+ [USE_NEON] (_gcry_sha1_transform_armv7_neon): New.
+ (transform) [USE_NEON]: Use ARM/NEON assembly if enabled.
+ * configure.ac: Add 'sha1-armv7-neon.lo'.
+
+ Improve performance of SHA-512/ARM/NEON implementation.
+ + commit df629ba53a662427ebd3ddca90c3fe9ddd6511d3
+ * cipher/sha512-armv7-neon.S (RT01q, RT23q, RT45q, RT67q): New.
+ (round_0_63, round_64_79): Remove.
+ (rounds2_0_63, rounds2_64_79): New.
+ (_gcry_sha512_transform_armv7_neon): Add 'nblks' input; Handle multiple
+ input blocks; Use new round macros.
+ * cipher/sha512.c [USE_ARM_NEON_ASM]
+ (_gcry_sha512_transform_armv7_neon): Add 'num_blks'.
+ (transform) [USE_ARM_NEON_ASM]: Pass nblks to assembly.
+
+ Add AVX and AVX2/BMI implementations for SHA-256.
+ + commit a5c2bbfe0db515d739ab683297903c77b1eec124
+ * LICENSES: Add 'cipher/sha256-avx-amd64.S' and
+ 'cipher/sha256-avx2-bmi2-amd64.S'.
+ * cipher/Makefile.am: Add 'sha256-avx-amd64.S' and
+ 'sha256-avx2-bmi2-amd64.S'.
+ * cipher/sha256-avx-amd64.S: New.
+ * cipher/sha256-avx2-bmi2-amd64.S: New.
+ * cipher/sha256-ssse3-amd64.S: Use 'lea' instead of 'add' in few
+ places for tiny speed improvement.
+ * cipher/sha256.c (USE_AVX, USE_AVX2): New.
+ (SHA256_CONTEXT) [USE_AVX, USE_AVX2]: Add 'use_avx' and 'use_avx2'.
+ (sha256_init, sha224_init) [USE_AVX, USE_AVX2]: Initialize above
+ new context members.
+ [USE_AVX] (_gcry_sha256_transform_amd64_avx): New.
+ [USE_AVX2] (_gcry_sha256_transform_amd64_avx2): New.
+ (transform) [USE_AVX2]: Use AVX2 assembly if enabled.
+ (transform) [USE_AVX]: Use AVX assembly if enabled.
+ * configure.ac: Add 'sha256-avx-amd64.lo' and
+ 'sha256-avx2-bmi2-amd64.lo'.
+
+2013-12-17 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add AVX and AVX/BMI2 implementations for SHA-1.
+ + commit e4e458465b124e25b6aec7a60174bf1ca32dc5fd
+ * cipher/Makefile.am: Add 'sha1-avx-amd64.S' and
+ 'sha1-avx-bmi2-amd64.S'.
+ * cipher/sha1-avx-amd64.S: New.
+ * cipher/sha1-avx-bmi2-amd64.S: New.
+ * cipher/sha1.c (USE_AVX, USE_BMI2): New.
+ (SHA1_CONTEXT) [USE_AVX]: Add 'use_avx'.
+ (SHA1_CONTEXT) [USE_BMI2]: Add 'use_bmi2'.
+ (sha1_init): Initialize 'use_avx' and 'use_bmi2'.
+ [USE_AVX] (_gcry_sha1_transform_amd64_avx): New.
+ [USE_BMI2] (_gcry_sha1_transform_amd64_bmi2): New.
+ (transform) [USE_BMI2]: Use BMI2 assembly if enabled.
+ (transform) [USE_AVX]: Use AVX assembly if enabled.
+ * configure.ac: Add 'sha1-avx-amd64.lo' and 'sha1-avx-bmi2-amd64.lo'.
+
+ SHA-1/SSSE3: Improve performance on large buffers.
+ + commit 6fd0dd2a5f1362f91e2861cd9d300341a43842a5
+ * cipher/sha1-ssse3-amd64.S (RNBLKS): New.
+ (_gcry_sha1_transform_amd64_ssse3): Handle multiple input blocks, with
+ software pipelining of next data block processing.
+ * cipher/sha1.c [USE_SSSE3] (_gcry_sha1_transform_amd64_ssse3): Add
+ 'nblks'.
+ (transform) [USE_SSSE3]: Pass nblks to assembly function.
+
+ Add bulk processing for hash transform functions.
+ + commit 50b8c8342d023038a4b528af83153293dd2756ea
+ * cipher/hash-common.c (_gcry_md_block_write): Preload 'hd->blocksize'
+ to stack, pass number of blocks to 'hd->bwrite'.
+ * cipher/hash-common.c (_gcry_md_block_write_t): Add 'nblks'.
+ * cipher/gostr3411-94.c: Rename 'transform' function to
+ 'transform_blk', add new 'transform' function with 'nblks' as
+ additional input.
+ * cipher/md4.c: Ditto.
+ * cipher/md5.c: Ditto.
+ * cipher/md4.c: Ditto.
+ * cipher/rmd160.c: Ditto.
+ * cipher/sha1.c: Ditto.
+ * cipher/sha256.c: Ditto.
+ * cipher/sha512.c: Ditto.
+ * cipher/stribog.c: Ditto.
+ * cipher/tiger.c: Ditto.
+ * cipher/whirlpool.c: Ditto.
+
+2013-12-16 Werner Koch <wk@gnupg.org>
+
+ Release 1.6.0.
+ + commit 0ea9731e1c93a962f6266004ab0e7418c19d6277
+
+
+ doc: Change yat2m to allow arbitrary condition names.
+ + commit 9a912f8c4f366c53f1cdb94513b67b937e87178b
+ * doc/yat2m.c (MAX_CONDITION_NESTING): New.
+ (gpgone_defined): Remove.
+ (condition_s, condition_stack, condition_stack_idx): New.
+ (cond_is_active, cond_in_verbatim): New.
+ (add_predefined_macro, set_macro, macro_set_p): New.
+ (evaluate_conditions, push_condition, pop_condition): New.
+ (parse_file): Rewrite to use the condition stack.
+ (top_parse_file): Set prefined macros.
+ (main): Change -D to define arbitrary macros.
+
+ tests: Add SHA-512 to the long hash test.
+ + commit 0d3bd23d7f730b9bbc81fc8da8d99f4853c36020
+ * tests/hashtest.c (testvectors): Add vectors for 256GiB SHA-512.
+ * tests/hashtest-256g.in (algos): Add test for SHA-512.
+
+ Add configure option --enable-large-data-tests.
+ + commit a6b9304a889397ac98e1c2c4ac3e178669d94492
+ * configure.ac: Add option --enable-large-data-tests.
+ * tests/hashtest-256g.in: New.
+ * tests/Makefile.am (EXTRA_DIST): Add hashtest-256g.in.
+ (TESTS): Split up into tests_bin, tests_bin_last, tests_sh, and
+ tests_sh_last.
+ (tests_sh_last): Add hashtest-256g
+ (noinst_PROGRAMS): Add only tests_bin and tests_bin_last.
+ (bench-slope.log, hashtest-256g.log): New rules to enforce serial run.
+
+ random: Call random progress handler more often.
+ + commit 5a7ce59396fe56f0d681df314bfbdb5f7732d4b1
+ * random/rndlinux.c (_gcry_rndlinux_gather_random): Update progress
+ indicator earlier.
+
+ cipher: Normalize the MPIs used as input to secret key functions.
+ + commit dec048b2ec79271a2f4405be5b87b1e768b3f1a9
+ * cipher/dsa.c (sign): Normalize INPUT.
+ * cipher/elgamal.c (decrypt): Normalize A and B.
+ * cipher/rsa.c (secret): Normalize the INPUT.
+ (rsa_decrypt): Reduce DATA before passing to secret.
+
+2013-12-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Change dummy variable in mpih-div.c to mpi_limb_t type.
+ + commit 953535a7de68cf62b5b1ad6f96ea3a9edd83762c
+ * mpi/mpih-div.c (_gcry_mpih_mod_1, _gcry_mpih_divmod_1): Change dummy
+ variable to 'mpi_limb_t' type from 'int'.
+
+ Remove duplicate gcry_mac_hd_t typedef.
+ + commit 5c31990214b58c4e17edb01fbbe6d9f573975a22
+ * cipher/mac-internal.h (gcry_mac_hd_t): Remove.
+
+2013-12-15 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Use u64 for CCM data lengths.
+ + commit 110fed2d6b0bbc97cb5cc0a3a564e05fc42afa2d
+ * cipher/cipher-ccm.c: Move code inside [HAVE_U64_TYPEDEF].
+ [HAVE_U64_TYPEDEF] (_gcry_cipher_ccm_set_lengths): Use 'u64' for
+ data lengths.
+ [!HAVE_U64_TYPEDEF] (_gcry_cipher_ccm_encrypt)
+ (_gcry_cipher_ccm_decrypt, _gcry_cipher_ccm_set_nonce)
+ (_gcry_cipher_ccm_authenticate, _gcry_cipher_ccm_get_tag)
+ (_gcry_cipher_ccm_check_tag): Dummy functions returning
+ GPG_ERROR_NOT_SUPPORTED.
+ * cipher/cipher-internal.h (gcry_cipher_handle.u_mode.ccm)
+ (_gcry_cipher_ccm_set_lengths): Move inside [HAVE_U64_TYPEDEF] and use
+ u64 instead of size_t for CCM data lengths.
+ * cipher/cipher.c (_gcry_cipher_open_internal, cipher_reset)
+ (_gcry_cipher_ctl) [!HAVE_U64_TYPEDEF]: Return GPG_ERR_NOT_SUPPORTED
+ for CCM.
+ (_gcry_cipher_ctl) [HAVE_U64_TYPEDEF]: Use u64 for
+ GCRYCTL_SET_CCM_LENGTHS length parameters.
+ * tests/basic.c: Do not use CCM if !HAVE_U64_TYPEDEF.
+ * tests/bench-slope.c: Ditto.
+ * tests/benchmark.c: Ditto.
+
+2013-12-14 Werner Koch <wk@gnupg.org>
+
+ tests: Prevent rare failure of gcry_pk_decrypt test.
+ + commit bfb43a17d8db571fca4ed433ee8be5c366745844
+ * tests/basic.c (check_pubkey_crypt): Add special mode 1.
+ (main): Add option --loop.
+
+2013-12-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Minor fixes to SHA assembly implementations.
+ + commit ffd9b2aa5abda7f4d7790ed48116ed5d71ab9995
+ * cipher/Makefile.am: Correct 'sha256-avx*.S' to 'sha512-avx*.S'.
+ * cipher/sha1-ssse3-amd64.S: First line, correct filename.
+ * cipher/sha256-ssse3-amd64.S: Return correct stack burn depth.
+ * cipher/sha512-avx-amd64.S: Use 'vzeroall' to clear registers.
+ * cipher/sha512-avx2-bmi2-amd64.S: Ditto and return correct stack burn
+ depth.
+
+ SHA-1/SSSE3: Do not check for Intel syntax assembly support.
+ + commit c86c35534a153b13e880d0bb0ea3e48e1c0ecaf9
+ * cipher/sha1-ssse3-amd64.S: Remove check for
+ HAVE_INTEL_SYNTAX_PLATFORM_AS.
+ * cipher/sha1.c [USE_SSSE3]: Ditto.
+
+2013-12-13 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Convert SHA-1 SSSE3 implementation from mixed asm&C to pure asm.
+ + commit d2b853246c2ed056a92096d89c3ca057e45c9c92
+ * cipher/Makefile.am: Change 'sha1-ssse3-amd64.c' to
+ 'sha1-ssse3-amd64.S'.
+ * cipher/sha1-ssse3-amd64.c: Remove.
+ * cipher/sha1-ssse3-amd64.S: New.
+
+ SHA-1: Add SSSE3 implementation.
+ + commit be2238f68abcc6f2b4e8c38ad9141376ce622a22
+ * cipher/Makefile.am: Add 'sha1-ssse3-amd64.c'.
+ * cipher/sha1-ssse3-amd64.c: New.
+ * cipher/sha1.c (USE_SSSE3): New.
+ (SHA1_CONTEXT) [USE_SSSE3]: Add 'use_ssse3'.
+ (sha1_init) [USE_SSSE3]: Initialize 'use_ssse3'.
+ (transform): Rename to...
+ (_transform): this.
+ (transform): New.
+ * configure.ac [host=x86_64]: Add 'sha1-ssse3-amd64.lo'.
+
+ Add missing register clearing in to SHA-256 and SHA-512 assembly.
+ + commit 04615cc6803cdede25fa92e3ff697e252a23cd7a
+ * cipher/sha256-ssse3-amd64.S: Clear used XMM/YMM registers at return.
+ * cipher/sha512-avx-amd64.S: Ditto.
+ * cipher/sha512-avx2-bmi2-amd64.S: Ditto.
+ * cipher/sha512-ssse3-amd64.S: Ditto.
+
+2013-12-13 Werner Koch <wk@gnupg.org>
+
+ Update license information.
+ + commit 764643a3d5634bcbc47790bd8505f6a1a5280d9c
+ * LICENSES: New.
+ * Makefile.am (EXTRA_DIST): Add LICENSES.
+ * AUTHORS: Add list of copyright holders.
+ * README: Reference AUTHORS.
+
+2013-12-13 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix empty clobber in AVX2 assembly check.
+ + commit e41d605ee41469e8a33cdc4d38f742cfb931f835
+ * configure.ac (gcry_cv_gcc_inline_asm_avx2): Add "cc" as assembly
+ globber.
+
+ Fix W32 build.
+ + commit a71b810ddd67ca3a1773d8f929d162551abb58eb
+ * random/rndw32.c (register_poll, slow_gatherer): Change gcry_xmalloc to
+ xmalloc, and gcry_xrealloc to xrealloc.
+
+2013-12-12 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ SHA-512: Add AVX and AVX2 implementations for x86-64.
+ + commit 2e4253dc8eb512cd0e807360926dc6ba912c95b4
+ * cipher/Makefile.am: Add 'sha512-avx-amd64.S' and
+ 'sha512-avx2-bmi2-amd64.S'.
+ * cipher/sha512-avx-amd64.S: New.
+ * cipher/sha512-avx2-bmi2-amd64.S: New.
+ * cipher/sha512.c (USE_AVX, USE_AVX2): New.
+ (SHA512_CONTEXT) [USE_AVX]: Add 'use_avx'.
+ (SHA512_CONTEXT) [USE_AVX2]: Add 'use_avx2'.
+ (sha512_init, sha384_init) [USE_AVX]: Initialize 'use_avx'.
+ (sha512_init, sha384_init) [USE_AVX2]: Initialize 'use_avx2'.
+ [USE_AVX] (_gcry_sha512_transform_amd64_avx): New.
+ [USE_AVX2] (_gcry_sha512_transform_amd64_avx2): New.
+ (transform) [USE_AVX2]: Add call for AVX2 implementation.
+ (transform) [USE_AVX]: Add call for AVX implementation.
+ * configure.ac (HAVE_GCC_INLINE_ASM_BMI2): New check.
+ (sha512): Add 'sha512-avx-amd64.lo' and 'sha512-avx2-bmi2-amd64.lo'.
+ * doc/gcrypt.texi: Document 'intel-cpu' and 'intel-bmi2'.
+ * src/g10lib.h (HWF_INTEL_CPU, HWF_INTEL_BMI2): New.
+ * src/hwfeatures.c (hwflist): Add "intel-cpu" and "intel-bmi2".
+ * src/hwf-x86.c (detect_x86_gnuc): Check for HWF_INTEL_CPU and
+ HWF_INTEL_BMI2.
+
+ SHA-512: Add SSSE3 implementation for x86-64.
+ + commit 69a6d0f9562fcd26112a589318c13de66ce1700e
+ * cipher/Makefile.am: Add 'sha512-ssse3-amd64.S'.
+ * cipher/sha512-ssse3-amd64.S: New.
+ * cipher/sha512.c (USE_SSSE3): New.
+ (SHA512_CONTEXT) [USE_SSSE3]: Add 'use_ssse3'.
+ (sha512_init, sha384_init) [USE_SSSE3]: Initialize 'use_ssse3'.
+ [USE_SSSE3] (_gcry_sha512_transform_amd64_ssse3): New.
+ (transform) [USE_SSSE3]: Call SSSE3 implementation.
+ * configure.ac (sha512): Add 'sha512-ssse3-amd64.lo'.
+
+ SHA-256: Add SSSE3 implementation for x86-64.
+ + commit e1a3931263e67aacec3c0bfcaa86c7d1441d5c6a
+ * cipher/Makefile.am: Add 'sha256-ssse3-amd64.S'.
+ * cipher/sha256-ssse3-amd64.S: New.
+ * cipher/sha256.c (USE_SSSE3): New.
+ (SHA256_CONTEXT) [USE_SSSE3]: Add 'use_ssse3'.
+ (sha256_init, sha224_init) [USE_SSSE3]: Initialize 'use_ssse3'.
+ (transform): Rename to...
+ (_transform): This.
+ [USE_SSSE3] (_gcry_sha256_transform_amd64_ssse3): New.
+ (transform): New.
+ * configure.ac (HAVE_INTEL_SYNTAX_PLATFORM_AS): New check.
+ (sha256): Add 'sha256-ssse3-amd64.lo'.
+ * doc/gcrypt.texi: Document 'intel-ssse3'.
+ * src/g10lib.h (HWF_INTEL_SSSE3): New.
+ * src/hwfeatures.c (hwflist): Add "intel-ssse3".
+ * src/hwf-x86.c (detect_x86_gnuc): Test for SSSE3.
+
+2013-12-12 Werner Koch <wk@gnupg.org>
+
+ Add a configuration file to disable hardware features.
+ + commit 5e1239b1e2948211ff2675f45cce2b28c3379cfb
+ * src/hwfeatures.c: Inclyde syslog.h and ctype.h.
+ (HWF_DENY_FILE): New.
+ (my_isascii): New.
+ (parse_hwf_deny_file): New.
+ (_gcry_detect_hw_features): Call it.
+
+ * src/mpicalc.c (main): Correctly initialize Libgcrypt. Add options
+ "--print-config" and "--disable-hwf".
+
+ Move list of hardware features to hwfeatures.c.
+ + commit 4ae77322b681a13da62d01274bcab25be2af12d0
+ * src/global.c (hwflist, disabled_hw_features): Move to ..
+ * src/hwfeatures.c: here.
+ (_gcry_disable_hw_feature): New.
+ (_gcry_enum_hw_features): New.
+ (_gcry_detect_hw_features): Remove arg DISABLED_FEATURES.
+ * src/global.c (print_config, _gcry_vcontrol, global_init): Adjust
+ accordingly.
+
+ Remove macro hacks for internal vs. external functions. Part 2 and last.
+ + commit 3b30e9840d4b351c4de73b126e561154cb7df4cc
+ * src/visibility.h: Remove remaining define/undef hacks for symbol
+ visibility. Add macros to detect the use of the public functions.
+ Change all affected functions by replacing them by the x-macros.
+ * src/g10lib.h: Add internal prototypes.
+ (xtrymalloc, xtrycalloc, xtrymalloc_secure, xtrycalloc_secure)
+ (xtryrealloc, xtrystrdup, xmalloc, xcalloc, xmalloc_secure)
+ (xcalloc_secure, xrealloc, xstrdup, xfree): New macros.
+
+2013-12-11 Werner Koch <wk@gnupg.org>
+
+ random: Add a feature to close device file descriptors.
+ + commit cd548ba2dc777b8b27d8d33182ba733c20222120
+ * src/gcrypt.h.in (GCRYCTL_CLOSE_RANDOM_DEVICE): New.
+ * src/global.c (_gcry_vcontrol): Call _gcry_random_close_fds.
+ * random/random.c (_gcry_random_close_fds): New.
+ * random/random-csprng.c (_gcry_rngcsprng_close_fds): New.
+ * random/random-fips.c (_gcry_rngfips_close_fds): New.
+ * random/random-system.c (_gcry_rngsystem_close_fds): New.
+ * random/rndlinux.c (open_device): Add arg retry.
+ (_gcry_rndlinux_gather_random): Add mode to close open fds.
+
+ * tests/random.c (check_close_random_device): New.
+ (main): Call new test.
+
+2013-12-10 Werner Koch <wk@gnupg.org>
+
+ Fix last commit (9a37470c)
+ + commit eae1e7712e1b687bd77eb37d0eb505fc9d46d93c
+ * src/secmem.c (lock_pool): Remove remaining line. Reported by Ian
+ Goldberg.
+
+2013-12-09 Werner Koch <wk@gnupg.org>
+
+ Fix one-off memory leak when build with Linux capability support.
+ + commit 9a37470c50ee9966cb2652617a404ddd54a9c096
+ * src/secmem.c (lock_pool, secmem_init): Use cap_free. Reported by
+ Mike Crowe <mac@mcrowe.com>.
+
+2013-12-09 David 'Digit' Turner <digit@google.com>
+
+ Update libtool to support Android.
+ + commit 2516f0b660b1a7181ad38c44310c627f4f498595
+ * m4/libtool.m4: Add "linux*android*" case. Taken from the libtool
+ repository.
+
+2013-12-09 Werner Koch <wk@gnupg.org>
+
+ tests: Speed up benchmarks in regression test mode.
+ + commit 2e5354fe8db5288939733d0fb63ad4c87bc20105
+ * tests/tsexp.c (check_extract_param): Fix compiler warning.
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Set GCRYPT_IN_REGRESSION_TEST.
+ * tests/bench-slope.c (main): Speed up if in regression test mode.
+ * tests/benchmark.c (main): Ditto.
+
+ tests: Add --csv option to bench-slope.
+ + commit 8072e9fa4b42ae8e65e266aa158fd903f1bb0927
+ * tests/bench-slope.c (STR, STR2): New.
+ (cvs_mode): New.
+ (num_measurement_repetitions): New. Replace use of
+ NUM_MEASUREMENT_REPETITIONS by this.
+ (current_section_name, current_algo_name, current_mode_name): New.
+ (bench_print_result_csv): New.
+ (bench_print_result_std): Rename from bench_print_result.
+ (bench_print_result): New. Divert depending on CSV_MODE.
+ (bench_print_header, bench_print_footer): take care of CSV_MODE.
+ (bench_print_algo, bench_print_mode): New. Use them instead of
+ explicit printfs.
+ (main): Add options --csv and --repetitions.
+
+2013-12-07 Werner Koch <wk@gnupg.org>
+
+ sexp: Allow long names and white space in gcry_sexp_extract_param.
+ + commit d4555433b6e422fa69a85cae99961f513e55d82b
+ * src/sexp.c (_gcry_sexp_vextract_param): Skip white space. Support
+ long parameter names.
+ * tests/tsexp.c (check_extract_param): Add test cases for long parameter
+ names and white space.
+
+2013-12-06 Werner Koch <wk@gnupg.org>
+
+ ecc: Merge partly duplicated code.
+ + commit 405021cb6d4e470337302c65dec5bc91491a89c1
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_sign): Factor A hashing out to ...
+ (_gcry_ecc_eddsa_compute_h_d): new function.
+ * cipher/ecc-misc.c (_gcry_ecc_compute_public): Use new function.
+ (reverse_buffer): Remove.
+
+ ecc: Remove unused internal function.
+ + commit 4cf2c65fe15173c8d68a141a01b34fc1fb9080b7
+ * src/cipher-proto.h (gcry_pk_spec): Remove get_param.
+ * cipher/ecc-curves.c (_gcry_ecc_get_param_sexp): Merge in code from
+ _gcry_ecc_get_param.
+ (_gcry_ecc_get_param): Remove.
+ * cipher/ecc.c (_gcry_pubkey_spec_ecc): Remove _gcry_ecc_get_param.
+
+2013-12-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix building on mingw32.
+ + commit 5917ce34e3b3eac4c15f62577e4723974024f818
+ * src/gcrypt-int.h: Include <types.h>.
+
+2013-12-05 Werner Koch <wk@gnupg.org>
+
+ ecc: Change OID for Ed25519.
+ + commit 7ef43d1eebb4f8226e860982dfe5fa2e2c82ad0f
+ * cipher/ecc-curves.c (curve_aliased): Add more suitable OID for
+ Ed25519.
+
+ Remove macro hacks for internal vs. external functions. Part 1.
+ + commit 7bacf1812b55fa78db63abaa1f5a9220e9c6cccc
+ * src/visibility.h: Remove almost all define/undef hacks for symbol
+ visibility. Add macros to detect the use of the public functions.
+ Change all affected functions by prefixing them explicitly with an
+ underscore and change all internal callers to call the underscore
+ prefixed versions. Provide convenience macros from sexp and mpi
+ functions.
+ * src/visibility.c: Change all functions to use only gpg_err_code_t
+ and translate to gpg_error_t only in visibility.c.
+
+2013-12-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ mpi: add inline assembly for x86-64.
+ + commit 85bb0a98ea5add0296cbcc415d557eaa1f6bd294
+ * mpi/longlong.h [__x86_64] (add_ssaaaa, sub_ddmmss, umul_ppmm)
+ (udiv_qrnnd, count_leading_zeros, count_trailing_zeros): New.
+
+2013-12-04 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: fix gcry_mpi_powm for negative base.
+ + commit c56080c26186d25dec05f01831494c77d8d07e13
+ * mpi/mpi-pow.c (gcry_mpi_powm) [USE_ALGORITHM_SIMPLE_EXPONENTIATION]:
+ Fix for the case where BASE is negative.
+ * tests/mpitests.c (test_powm): Add a test case of (-17)^6 mod 19.
+
+2013-12-03 Werner Koch <wk@gnupg.org>
+
+ Add build support for ppc64le.
+ + commit 2ff86db2e1b0f6cc22a1ca86037b526c5fa3be51
+ * config.guess, config.sub: Update to latest version (2013-11-29).
+ * m4/libtool.m4: Add patches for ppc64le.
+
+2013-12-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: fix compiler warning on aarch64.
+ + commit 59b1a1b7ee2923e1bf091071ae716d180c6c6006
+ * cipher/rijndael.c (do_setkey): Use braces for empty if statement
+ instead of semicolon.
+
+ Add aarch64 (arm64) mpi assembly.
+ + commit 80896bc8f5e6ed9a627374e34f040ad5f3617584
+ * mpi/aarch64/mpi-asm-defs.h: New.
+ * mpi/aarch64/mpih-add1.S: New.
+ * mpi/aarch64/mpih-mul1.S: New.
+ * mpi/aarch64/mpih-mul2.S: New.
+ * mpi/aarch64/mpih-mul3.S: New.
+ * mpi/aarch64/mpih-sub1.S: New.
+ * mpi/config.links [host=aarch64-*-*]: Add configguration for aarch64
+ assembly.
+ * mpi/longlong.h [__aarch64__] (add_ssaaaa, sub_ddmmss, umul_ppmm)
+ (count_leading_zeros): New.
+
+2013-12-02 Werner Koch <wk@gnupg.org>
+
+ ecc: Use constant time point operation for Twisted Edwards.
+ + commit d4ce0cfe0d35d7ec69c115456848b5b735c928ea
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Try to do a constant time
+ operation if needed.
+ * tests/benchmark.c (main): Add option --use-secmem.
+
+ ecc: Make gcry_pk_testkey work for Ed25519.
+ + commit 14ae6224b1b17abbfc80c26ad0f4c60f1e8635e2
+ * cipher/ecc-misc.c (_gcry_ecc_compute_public): Add optional args G
+ and d. Change all callers.
+ * cipher/ecc.c (gen_y_2): Remove.
+ (check_secret_key): Use generic public key compute function. Adjust
+ for use with Ed25519 and EdDSA.
+ (nist_generate_key): Do not use the compliant key thingy for Ed25519.
+ (ecc_check_secret_key): Make parameter parsing similar to the other
+ functions.
+ * cipher/ecc-curves.c (domain_parms): Zero prefix some parameters so
+ that _gcry_ecc_update_curve_param works correctly.
+ * tests/keygen.c (check_ecc_keys): Add "param" flag. Check all
+ Ed25519 keys.
+
+ ecc: Fix eddsa point decompression.
+ + commit 485f35124b1a74af0bad321ed70be3a79d8d11d7
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_recover_x): Fix the negative
+ case.
+
+ ecc: Fix gcry_mpi_ec_curve_point for Weierstrass.
+ + commit ecb90f8e7c6f2516080d27ed7da6a25f2314da3c
+ * mpi/ec.c (_gcry_mpi_ec_curve_point): Use correct equation.
+ (ec_pow3): New.
+ (ec_p_init): Always copy B.
+
+ mpi: Introduce 4 user flags for gcry_mpi_t.
+ + commit 29eddc2558d4cf39995f66d5fccd62f584d5b203
+ * src/gcrypt.h.in (GCRYMPI_FLAG_USER1, GCRYMPI_FLAG_USER2)
+ (GCRYMPI_FLAG_USER3, GCRYMPI_FLAG_USER4): New.
+ * mpi/mpiutil.c (gcry_mpi_set_flag, gcry_mpi_clear_flag)
+ (gcry_mpi_get_flag, _gcry_mpi_free): Implement them.
+ (gcry_mpi_set_opaque): Keep user flags.
+
+2013-11-29 Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com>
+
+ Fix armv3 compile error.
+ + commit 3b1cc9e6c357574f54160298d731c18f3d717b6c
+ * mpi/longlong.h [__arm__ && __ARM_ARCH < 4] (umul_ppmm): Use
+ __AND_CLOBBER_CC instead of __CLOBBER_CC.
+
+ longlong.h on mips with clang.
+ + commit 1ecbd0bca31d462719a2a6590c1d03244e76ef89
+ * mpi/longlong.h [__mips__]: Use C-language version with clang.
+
+2013-11-24 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Camellia: Tweaks for AES-NI implementations.
+ + commit 3ef21e7e1b8003db9792155044db95f9d9ced184
+ * cipher/camellia-aesni-avx-amd64.S: Align stack to 16 bytes; tweak
+ key-setup for small speed up.
+ * cipher/camellia-aesni-avx2-amd64.S: Use vmovdqu even with aligned
+ stack; reorder vinsert128 instructions; use rbp for stack frame.
+
+2013-11-21 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add GMAC to MAC API.
+ + commit a34448c929b13bfb7b66d69169c89e7319a18b31
+ * cipher/Makefile.am: Add 'mac-gmac.c'.
+ * cipher/mac-gmac.c: New.
+ * cipher/mac-internal.h (gcry_mac_handle): Add 'u.gcm'.
+ (_gcry_mac_type_spec_gmac_aes, _gcry_mac_type_spec_gmac_twofish)
+ (_gcry_mac_type_spec_gmac_serpent, _gcry_mac_type_spec_gmac_seed)
+ (_gcry_mac_type_spec_gmac_camellia): New externs.
+ * cipher/mac.c (mac_list): Add GMAC specifications.
+ * doc/gcrypt.texi: Add mention of GMAC.
+ * src/gcrypt.h.in (gcry_mac_algos): Add GCM algorithms.
+ * tests/basic.c (check_one_mac): Add support for MAC IVs.
+ (check_mac): Add support for MAC IVs and add GMAC test vectors.
+ * tests/bench-slope.c (mac_bench): Iterate algorithm numbers to 499.
+ * tests/benchmark.c (mac_bench): Iterate algorithm numbers to 499.
+
+ GCM: Move gcm_table initialization to setkey.
+ + commit dbfa651618693da7ea73b4d2d00d4efd411bfb46
+ * cipher/cipher-gcm.c: Change all 'c->u_iv.iv' to
+ 'c->u_mode.gcm.u_ghash_key.key'.
+ (_gcry_cipher_gcm_setkey): New.
+ (_gcry_cipher_gcm_initiv): Move ghash initialization to function above.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add
+ 'u_mode.gcm.u_ghash_key'; Reorder 'u_mode.gcm' members for partial
+ clearing in gcry_cipher_reset.
+ (_gcry_cipher_gcm_setkey): New prototype.
+ * cipher/cipher.c (cipher_setkey): Add GCM setkey.
+ (cipher_reset): Clear 'u_mode' only partially for GCM.
+
+2013-11-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ GCM: Add support for split data buffers and online operation.
+ + commit fb1e52e3fe231671de546eacd6becd31c26c4f7b
+ * cipher/cipher-gcm.c (do_ghash_buf): Add buffering for less than
+ blocksize length input and padding handling.
+ (_gcry_cipher_gcm_encrypt, _gcry_cipher_gcm_decrypt): Add handling
+ for AAD padding and check if data has already being padded.
+ (_gcry_cipher_gcm_authenticate): Check that AAD or data has not being
+ padded yet.
+ (_gcry_cipher_gcm_initiv): Clear padding marks.
+ (_gcry_cipher_gcm_tag): Add finalization and padding; Clear sensitive
+ data from cipher handle, since they are not used after generating tag.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add 'u_mode.gcm.macbuf',
+ 'u_mode.gcm.mac_unused', 'u_mode.gcm.ghash_data_finalized' and
+ 'u_mode.gcm.ghash_aad_finalized'.
+ * tests/basic.c (check_gcm_cipher): Rename to...
+ (_check_gcm_cipher): ...this and add handling for different buffer step
+ lengths; Enable per byte buffer testing.
+ (check_gcm_cipher): Call _check_gcm_cipher with different buffer step
+ sizes.
+
+ GCM: Use size_t for buffer sizes.
+ + commit 2d870a9142e8c8b3f008e1ad8e83e4bdf7a8e4e7
+ * cipher/cipher-gcm.c (ghash, gcm_bytecounter_add, do_ghash_buf)
+ (_gcry_cipher_gcm_encrypt, _gcry_cipher_gcm_decrypt)
+ (_gcry_cipher_gcm_authenticate, _gcry_cipher_gcm_geniv)
+ (_gcry_cipher_gcm_tag): Use size_t for buffer lengths.
+ * cipher/cipher-internal.h (_gcry_cipher_gcm_encrypt)
+ (_gcry_cipher_gcm_decrypt, _gcry_cipher_gcm_authenticate): Use size_t
+ for buffer lengths.
+
+ GCM: add FIPS mode restrictions.
+ + commit 56d352d6bdcf7abaa33c3399741f5063e2ddc32a
+ * cipher/cipher-gcm.c (_gcry_cipher_gcm_encrypt)
+ (_gcry_cipher_gcm_get_tag): Do not allow using in FIPS mode is setiv
+ was invocated directly.
+ (_gcry_cipher_gcm_setiv): Rename to...
+ (_gcry_cipher_gcm_initiv): ...this.
+ (_gcry_cipher_gcm_setiv): New setiv function with check for FIPS mode.
+ [TODO] (_gcry_cipher_gcm_getiv): New.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add
+ 'u_mode.gcm.disallow_encryption_because_of_setiv_in_fips_mode'.
+
+ GCM: Add clearing and checking of marks.tag.
+ + commit 32a2da9abc91394b23cf565c1c833fa964394083
+ * cipher/cipher-gcm.c (_gcry_cipher_gcm_encrypt)
+ (_gcry_cipher_gcm_decrypt, _gcry_cipher_gcm_authenticate): Make sure
+ that tag has not been finalized yet.
+ (_gcry_cipher_gcm_setiv): Clear 'marks.tag'.
+
+ GCM: Add stack burning.
+ + commit 018f08354b1b116672e82f9ce942884b288aaf9e
+ * cipher/cipher-gcm.c (do_ghash, ghash): Return stack burn depth.
+ (setupM): Wipe 'tmp' buffer.
+ (do_ghash_buf): Wipe 'tmp' buffer and add stack burning.
+
+ Add aggregated bulk processing for GCM on x86-64.
+ + commit c9537fbf8ff0af919cff2bebadc4c6e7caea8076
+ * cipher/cipher-gcm.c [__x86_64__] (gfmul_pclmul_aggr4): New.
+ (ghash) [GCM_USE_INTEL_PCLMUL]: Add aggregated bulk processing
+ for __x86_64__.
+ (setupM) [__x86_64__]: Add initialization for aggregated bulk
+ processing.
+
+ GCM: Tweak Intel PCLMUL ghash loop for small speed-up.
+ + commit 9b6764944284fed733c2f88619b3d9eb5d5c259a
+ * cipher/cipher-gcm.c (do_ghash): Mark 'inline'.
+ [GCM_USE_INTEL_PCLMUL] (do_ghash_pclmul): Rename to...
+ [GCM_USE_INTEL_PCLMUL] (gfmul_pclmul): ..this and make inline function.
+ (ghash) [GCM_USE_INTEL_PCLMUL]: Preload data before ghash-pclmul loop.
+
+ GCM: Use counter mode code for speed-up.
+ + commit bd4bd23a2511a4bce63c3217cca0d4ecf0c79532
+ * cipher/cipher-gcm.c (ghash): Add process for multiple blocks.
+ (gcm_bytecounter_add, gcm_add32_be128, gcm_check_datalen)
+ (gcm_check_aadlen_or_ivlen, do_ghash_buf): New functions.
+ (_gcry_cipher_gcm_encrypt, _gcry_cipher_gcm_decrypt)
+ (_gcry_cipher_gcm_authenticate, _gcry_cipher_gcm_set_iv)
+ (_gcry_cipher_gcm_tag): Adjust to use above new functions and
+ counter mode functions for encryption/decryption.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Remove 'length'; Add
+ 'u_mode.gcm.(addlen|datalen|tagiv|datalen_over_limits)'.
+ (_gcry_cipher_gcm_setiv): Return gcry_err_code_t.
+ * cipher/cipher.c (cipher_setiv): Return error code.
+ (_gcry_cipher_setiv): Handle error code from 'cipher_setiv'.
+
+ Add Intel PCLMUL acceleration for GCM.
+ + commit 5a65ffabadd50f174ab7375faad7a726cce49e61
+ * cipher/cipher-gcm.c (fillM): Rename...
+ (do_fillM): ...to this.
+ (ghash): Remove.
+ (fillM): New macro.
+ (GHASH): Use 'do_ghash' instead of 'ghash'.
+ [GCM_USE_INTEL_PCLMUL] (do_ghash_pclmul): New.
+ (ghash): New.
+ (setupM): New.
+ (_gcry_cipher_gcm_encrypt, _gcry_cipher_gcm_decrypt)
+ (_gcry_cipher_gcm_authenticate, _gcry_cipher_gcm_setiv)
+ (_gcry_cipher_gcm_tag): Use 'ghash' instead of 'GHASH' and
+ 'c->u_mode.gcm.u_tag.tag' instead of 'c->u_tag.tag'.
+ * cipher/cipher-internal.h (GCM_USE_INTEL_PCLMUL): New.
+ (gcry_cipher_handle): Move 'u_tag' and 'gcm_table' under
+ 'u_mode.gcm'.
+ * configure.ac (pclmulsupport, gcry_cv_gcc_inline_asm_pclmul): New.
+ * src/g10lib.h (HWF_INTEL_PCLMUL): New.
+ * src/global.c: Add "intel-pclmul".
+ * src/hwf-x86.c (detect_x86_gnuc): Add check for Intel PCLMUL.
+
+ GCM: GHASH optimizations.
+ + commit 0e9e7d72f3c9eb7ac832746c3034855faaf8d02c
+ * cipher/cipher-gcm.c [GCM_USE_TABLES] (gcmR, ghash): Replace with new.
+ [GCM_USE_TABLES] [GCM_TABLES_USE_U64] (bshift, fillM, do_ghash): New.
+ [GCM_USE_TABLES] [!GCM_TABLES_USE_U64] (bshift, fillM): Replace with
+ new.
+ [GCM_USE_TABLES] [!GCM_TABLES_USE_U64] (do_ghash): New.
+ (_gcry_cipher_gcm_tag): Remove extra memcpy to outbuf and use
+ buf_eq_const for comparing authentication tag.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Different 'gcm_table'
+ for 32-bit and 64-bit platforms.
+
+ Add some documentation for GCM mode.
+ + commit 332da0ed7c8fab6c2bee841c94d8364c2ab4e30d
+ * doc/gcrypt.texi: Add mention of GCM mode.
+
+2013-11-19 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Initial implementation of GCM.
+ + commit 90cce18b9eced4f412ceeec5bcae18c4493322df
+ * cipher/Makefile.am: Add 'cipher-gcm.c'.
+ * cipher/cipher-ccm.c (_gcry_ciphert_ccm_set_lengths)
+ (_gcry_cipher_ccm_authenticate, _gcry_cipher_ccm_tag)
+ (_gcry_cipher_ccm_encrypt, _gcry_cipher_ccm_decrypt): Change
+ 'c->u_mode.ccm.tag' to 'c->marks.tag'.
+ * cipher/cipher-gcm.c: New.
+ * cipher/cipher-internal.h (GCM_USE_TABLES): New.
+ (gcry_cipher_handle): Add 'marks.tag', 'u_tag', 'length' and
+ 'gcm_table'; Remove 'u_mode.ccm.tag'.
+ (_gcry_cipher_gcm_encrypt, _gcry_cipher_gcm_decrypt)
+ (_gcry_cipher_gcm_setiv, _gcry_cipher_gcm_authenticate)
+ (_gcry_cipher_gcm_get_tag, _gcry_cipher_gcm_check_tag): New.
+ * cipher/cipher.c (_gcry_cipher_open_internal, cipher_setkey)
+ (cipher_encrypt, cipher_decrypt, _gcry_cipher_authenticate)
+ (_gcry_cipher_gettag, _gcry_cipher_checktag): Add GCM mode handling.
+ * src/gcrypt.h.in (gcry_cipher_modes): Add GCRY_CIPHER_MODE_GCM.
+ (GCRY_GCM_BLOCK_LEN): New.
+ * tests/basic.c (check_gcm_cipher): New.
+ (check_ciphers): Add GCM check.
+ (check_cipher_modes): Call 'check_gcm_cipher'.
+ * tests/bench-slope.c (bench_gcm_encrypt_do_bench)
+ (bench_gcm_decrypt_do_bench, bench_gcm_authenticate_do_bench)
+ (gcm_encrypt_ops, gcm_decrypt_ops, gcm_authenticate_ops): New.
+ (cipher_modes): Add GCM enc/dec/auth.
+ (cipher_bench_one): Limit GCM to block ciphers with 16 byte block-size.
+ * tests/benchmark.c (cipher_bench): Add GCM.
+
+2013-11-19 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Camellia: fix compiler warning.
+ + commit 9816ae9d9931b75e4fdc9a5be10e6af447132313
+ * cipher/camellia-glue.c (camellia_setkey): Use braces around empty if
+ statement.
+
+ Tweak Camellia-AVX key-setup for small speed-up.
+ + commit 77922a82c3f2e30eca04511fa5a355208349c657
+ * cipher/camellia-aesni-avx-amd64.S (camellia_f): Merge S-function output
+ rotation with P-function.
+
+ Add CMAC (Cipher-based MAC) to MAC API.
+ + commit b49cd64aaaff2e5488a84665362ef7150683226c
+ * cipher/Makefile.am: Add 'cipher-cmac.c' and 'mac-cmac.c'.
+ * cipher/cipher-cmac.c: New.
+ * cipher/cipher-internal.h (gcry_cipher_handle.u_mode): Add 'cmac'.
+ * cipher/cipher.c (gcry_cipher_open): Rename to...
+ (_gcry_cipher_open_internal): ...this and add CMAC.
+ (gcry_cipher_open): New wrapper that disallows use of internal
+ modes (CMAC) from outside.
+ (cipher_setkey, cipher_encrypt, cipher_decrypt)
+ (_gcry_cipher_authenticate, _gcry_cipher_gettag)
+ (_gcry_cipher_checktag): Add handling for CMAC mode.
+ (cipher_reset): Do not reset 'marks.key' and do not clear subkeys in
+ 'u_mode' in CMAC mode.
+ * cipher/mac-cmac.c: New.
+ * cipher/mac-internal.h: Add CMAC support and algorithms.
+ * cipher/mac.c: Add CMAC algorithms.
+ * doc/gcrypt.texi: Add documentation for CMAC.
+ * src/cipher.h (gcry_cipher_internal_modes): New.
+ (_gcry_cipher_open_internal, _gcry_cipher_cmac_authenticate)
+ (_gcry_cipher_cmac_get_tag, _gcry_cipher_cmac_check_tag)
+ (_gcry_cipher_cmac_set_subkeys): New prototypes.
+ * src/gcrypt.h.in (gcry_mac_algos): Add CMAC algorithms.
+ * tests/basic.c (check_mac): Add CMAC test vectors.
+
+2013-11-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add new MAC API, initially with HMAC.
+ + commit fcd6da37d55f248d3558ee0ff385b41b866e7ded
+ * cipher/Makefile.am: Add 'mac.c', 'mac-internal.h' and 'mac-hmac.c'.
+ * cipher/bufhelp.h (buf_eq_const): New.
+ * cipher/cipher-ccm.c (_gcry_cipher_ccm_tag): Use 'buf_eq_const' for
+ constant-time compare.
+ * cipher/mac-hmac.c: New.
+ * cipher/mac-internal.h: New.
+ * cipher/mac.c: New.
+ * doc/gcrypt.texi: Add documentation for MAC API.
+ * src/gcrypt-int.h [GPG_ERROR_VERSION_NUMBER < 1.13]
+ (GPG_ERR_MAC_ALGO): New.
+ * src/gcrypt.h.in (gcry_mac_handle, gcry_mac_hd_t, gcry_mac_algos)
+ (gcry_mac_flags, gcry_mac_open, gcry_mac_close, gcry_mac_ctl)
+ (gcry_mac_algo_info, gcry_mac_setkey, gcry_mac_setiv, gcry_mac_write)
+ (gcry_mac_read, gcry_mac_verify, gcry_mac_get_algo_maclen)
+ (gcry_mac_get_algo_keylen, gcry_mac_algo_name, gcry_mac_map_name)
+ (gcry_mac_reset, gcry_mac_test_algo): New.
+ * src/libgcrypt.def (gcry_mac_open, gcry_mac_close, gcry_mac_ctl)
+ (gcry_mac_algo_info, gcry_mac_setkey, gcry_mac_setiv, gcry_mac_write)
+ (gcry_mac_read, gcry_mac_verify, gcry_mac_get_algo_maclen)
+ (gcry_mac_get_algo_keylen, gcry_mac_algo_name, gcry_mac_map_name): New.
+ * src/libgcrypt.vers (gcry_mac_open, gcry_mac_close, gcry_mac_ctl)
+ (gcry_mac_algo_info, gcry_mac_setkey, gcry_mac_setiv, gcry_mac_write)
+ (gcry_mac_read, gcry_mac_verify, gcry_mac_get_algo_maclen)
+ (gcry_mac_get_algo_keylen, gcry_mac_algo_name, gcry_mac_map_name): New.
+ * src/visibility.c (gcry_mac_open, gcry_mac_close, gcry_mac_ctl)
+ (gcry_mac_algo_info, gcry_mac_setkey, gcry_mac_setiv, gcry_mac_write)
+ (gcry_mac_read, gcry_mac_verify, gcry_mac_get_algo_maclen)
+ (gcry_mac_get_algo_keylen, gcry_mac_algo_name, gcry_mac_map_name): New.
+ * src/visibility.h (gcry_mac_open, gcry_mac_close, gcry_mac_ctl)
+ (gcry_mac_algo_info, gcry_mac_setkey, gcry_mac_setiv, gcry_mac_write)
+ (gcry_mac_read, gcry_mac_verify, gcry_mac_get_algo_maclen)
+ (gcry_mac_get_algo_keylen, gcry_mac_algo_name, gcry_mac_map_name): New.
+ * tests/basic.c (check_one_mac, check_mac): New.
+ (main): Call 'check_mac'.
+ * tests/bench-slope.c (bench_print_header, bench_print_footer): Allow
+ variable algorithm name width.
+ (_cipher_bench, hash_bench): Update to above change.
+ (bench_hash_do_bench): Add 'gcry_md_reset'.
+ (bench_mac_mode, bench_mac_init, bench_mac_free, bench_mac_do_bench)
+ (mac_ops, mac_modes, mac_bench_one, _mac_bench, mac_bench): New.
+ (main): Add 'mac' benchmark options.
+ * tests/benchmark.c (mac_repetitions, mac_bench): New.
+ (main): Add 'mac' benchmark options.
+
+ Use correct blocksize of 32 bytes for GOSTR3411-94 HMAC.
+ + commit b95a557a43aeed68ea5e5ce02aca42ee97bfdb3b
+ * cipher/md.c (md_open): Set macpads_Bsize to 32 for
+ GCRY_MD_GOST24311_94.
+
+2013-11-15 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cipher: use size_t for internal buffer lengths.
+ + commit b787657a9d2c1d8e19f9fcb0b21e31cb062630cf
+ * cipher/arcfour.c (do_encrypt_stream, encrypt_stream): Use 'size_t'
+ for buffer lengths.
+ * cipher/blowfish.c (_gcry_blowfish_ctr_enc, _gcry_blowfish_cbc_dec)
+ (_gcry_blowfish_cfb_dec): Ditto.
+ * cipher/camellia-glue.c (_gcry_camellia_ctr_enc)
+ (_gcry_camellia_cbc_dec, _gcry_blowfish_cfb_dec): Ditto.
+ * cipher/cast5.c (_gcry_cast5_ctr_enc, _gcry_cast5_cbc_dec)
+ (_gcry_cast5_cfb_dec): Ditto.
+ * cipher/cipher-aeswrap.c (_gcry_cipher_aeswrap_encrypt)
+ (_gcry_cipher_aeswrap_decrypt): Ditto.
+ * cipher/cipher-cbc.c (_gcry_cipher_cbc_encrypt)
+ (_gcry_cipher_cbc_decrypt): Ditto.
+ * cipher/cipher-ccm.c (_gcry_cipher_ccm_encrypt)
+ (_gcry_cipher_ccm_decrypt): Ditto.
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb_encrypt)
+ (_gcry_cipher_cfb_decrypt): Ditto.
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Ditto.
+ * cipher/cipher-internal.h (gcry_cipher_handle->bulk)
+ (_gcry_cipher_cbc_encrypt, _gcry_cipher_cbc_decrypt)
+ (_gcry_cipher_cfb_encrypt, _gcry_cipher_cfb_decrypt)
+ (_gcry_cipher_ofb_encrypt, _gcry_cipher_ctr_encrypt)
+ (_gcry_cipher_aeswrap_encrypt, _gcry_cipher_aeswrap_decrypt)
+ (_gcry_cipher_ccm_encrypt, _gcry_cipher_ccm_decrypt): Ditto.
+ * cipher/cipher-ofb.c (_gcry_cipher_cbc_encrypt): Ditto.
+ * cipher/cipher-selftest.h (gcry_cipher_bulk_cbc_dec_t)
+ (gcry_cipher_bulk_cfb_dec_t, gcry_cipher_bulk_ctr_enc_t): Ditto.
+ * cipher/cipher.c (cipher_setkey, cipher_setiv, do_ecb_crypt)
+ (do_ecb_encrypt, do_ecb_decrypt, cipher_encrypt)
+ (cipher_decrypt): Ditto.
+ * cipher/rijndael.c (_gcry_aes_ctr_enc, _gcry_aes_cbc_dec)
+ (_gcry_aes_cfb_dec, _gcry_aes_cbc_enc, _gcry_aes_cfb_enc): Ditto.
+ * cipher/salsa20.c (salsa20_setiv, salsa20_do_encrypt_stream)
+ (salsa20_encrypt_stream, salsa20r12_encrypt_stream): Ditto.
+ * cipher/serpent.c (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec)
+ (_gcry_serpent_cfb_dec): Ditto.
+ * cipher/twofish.c (_gcry_twofish_ctr_enc, _gcry_twofish_cbc_dec)
+ (_gcry_twofish_cfb_dec): Ditto.
+ * src/cipher-proto.h (gcry_cipher_stencrypt_t)
+ (gcry_cipher_stdecrypt_t, cipher_setiv_fuct_t): Ditto.
+ * src/cipher.h (_gcry_aes_cfb_enc, _gcry_aes_cfb_dec)
+ (_gcry_aes_cbc_enc, _gcry_aes_cbc_dec, _gcry_aes_ctr_enc)
+ (_gcry_blowfish_cfb_dec, _gcry_blowfish_cbc_dec)
+ (_gcry_blowfish_ctr_enc, _gcry_cast5_cfb_dec, _gcry_cast5_cbc_dec)
+ (_gcry_cast5_ctr_enc, _gcry_camellia_cfb_dec, _gcry_camellia_cbc_dec)
+ (_gcry_camellia_ctr_enc, _gcry_serpent_cfb_dec, _gcry_serpent_cbc_dec)
+ (_gcry_serpent_ctr_enc, _gcry_twofish_cfb_dec, _gcry_twofish_cbc_dec)
+ (_gcry_twofish_ctr_enc): Ditto.
+
+ Camellia: Add AVX/AES-NI key setup.
+ + commit ef9f52cbb39e46918c96200b09c21e931eff174f
+ * cipher/camellia-aesni-avx-amd64.S (key_bitlength, key_table): New
+ order of fields in ctx.
+ (camellia_f, vec_rol128, vec_ror128): New macros.
+ (__camellia_avx_setup128, __camellia_avx_setup256)
+ (_gcry_camellia_aesni_avx_keygen): New functions.
+ * cipher/camellia-aesni-avx2-amd64.S (key_bitlength, key_table): New
+ order of fields in ctx.
+ * cipher/camellia-arm.S (CAMELLIA_TABLE_BYTE_LEN, key_length): Remove
+ unused macros.
+ * cipher/camellia-glue.c (CAMELLIA_context): Move keytable to head for
+ better alignment; Make 'use_aesni_avx' and 'use_aesni_avx2' bitfield
+ members.
+ [USE_AESNI_AVX] (_gcry_camellia_aesni_avx_keygen): New prototype.
+ (camellia_setkey) [USE_AESNI_AVX || USE_AESNI_AVX2]: Read hw features
+ to variable 'hwf' and match features from it.
+ (camellia_setkey) [USE_AESNI_AVX]: Use AES-NI/AVX key setup if
+ available.
+
+ Avoid unneeded stack burning with AES-NI and reduce number of 'decryption_prepared' checks
+ + commit c8ad83fb605fdbf6dc0b0dbcc8aedfbd477640da
+ * cipher/rijndael.c (RIJNDAEL_context): Make 'decryption_prepared',
+ 'use_padlock' and 'use_aesni' 1-bit members in bitfield.
+ (do_setkey): Move 'hwfeatures' inside [USE_AESNI || USE_PADLOCK].
+ (do_aesni_enc_aligned): Rename to...
+ (do_aesni_enc): ...this, as function does not require aligned input.
+ (do_aesni_dec_aligned): Rename to...
+ (do_aesni_dec): ...this, as function does not require aligned input.
+ (do_aesni): Remove.
+ (rijndael_encrypt): Call 'do_aesni_enc' instead of 'do_aesni'.
+ (rijndael_decrypt): Call 'do_aesni_dec' instead of 'do_aesni'.
+ (check_decryption_preparation): New.
+ (do_decrypt): Remove 'decryption_prepared' check.
+ (rijndael_decrypt): Ditto and call 'check_decryption_preparation'.
+ (_gcry_aes_cbc_dec): Ditto.
+ (_gcry_aes_cfb_enc): Add 'burn_depth' and burn stack only when needed.
+ (_gcry_aes_cbc_enc): Ditto.
+ (_gcry_aes_ctr_enc): Ditto.
+ (_gcry_aes_cfb_dec): Ditto.
+ (_gcry_aes_cbc_dec): Ditto and correct clearing of 'savebuf'.
+
+2013-11-14 Werner Koch <wk@gnupg.org>
+
+ md: Fix hashing for data >= 256 GB.
+ + commit c43a8c0d81a711161f7a81b24ef7c33a1353eee0
+ * cipher/hash-common.h (gcry_md_block_ctx): Add "nblocks_high".
+ * cipher/hash-common.c (_gcry_md_block_write): Bump NBLOCKS_HIGH.
+ * cipher/md4.c (md4_init, md4_final): Take care of NBLOCKS_HIGH.
+ * cipher/md5.c (md5_init, md5_final): Ditto.
+ * cipher/rmd160.c (_gcry_rmd160_init, rmd160_final): Ditto.
+ * cipher/sha1.c (sha1_init, sha1_final): Ditto.
+ * cipher/sha256.c (sha256_init, sha224_init, sha256_final): Ditto.
+ * cipher/sha512.c (sha512_init, sha384_init, sha512_final): Ditto.
+ * cipher/tiger.c (do_init, tiger_final): Ditto.
+ * cipher/whirlpool.c (whirlpool_final): Ditto.
+
+ * cipher/md.c (gcry_md_algo_info): Add GCRYCTL_SELFTEST.
+ (_gcry_md_selftest): Return "not implemented" as required.
+ * tests/hashtest.c: New.
+ * tests/genhashdata.c: New.
+ * tests/Makefile.am (TESTS): Add hashtest.
+ (noinst_PROGRAMS): Add genhashdata
+
+2013-11-13 Christian Grothoff <christian@grothoff.org>
+
+ ecc: Fix key generation for a plain Ed25519 key.
+ + commit 7d91e99bcd30a463dd4faed014b8521a663d8316
+ * cipher/ecc.c (nist_generate_key): Use custom code for ED25519.
+
+ ecc: Fix some memory leaks.
+ + commit c4f9af49f228df59c218381a25fa3c0f93ccbeae
+ * cipher/ecc-curves.c (_gcry_mpi_ec_new): Free ec->b before assigning.
+ * cipher/ecc.c (nist_generate_key): Release Q.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_genkey): Ditto.
+
+2013-11-11 Werner Koch <wk@gnupg.org>
+
+ ecc: Change keygrip computation for Ed25519+EdDSA.
+ + commit 4fb3c8e5a7fc6a1568f54bcc0be17fecf75e0742
+ * cipher/ecc.c (compute_keygrip): Rework.
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_ensure_compact): New.
+ * cipher/ecc-curves.c (_gcry_ecc_update_curve_param): New.
+ * tests/keygrip.c (key_grips): Add flag param and test cases for
+ Ed25519.
+
+ mpi: Add special format GCRYMPI_FMT_OPAQUE.
+ + commit 8b3eecee2d89179297e43de7d650f74759c61a58
+ * src/gcrypt.h.in (GCRYMPI_FMT_OPAQUE): New.
+ (_gcry_sexp_nth_opaque_mpi): Remove.
+ * src/sexp.c (gcry_sexp_nth_mpi): Add support for GCRYMPI_FMT_OPAQUE.
+ (_gcry_sexp_vextract_param): Replace removed function by
+ GCRYMPI_FMT_OPAQUE.
+
+2013-11-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix error output in CTR selftest.
+ + commit 7b26586e35a6d407ca31b41528b0810b1408fd4b
+ * cipher/cipher-selftest.c (_gcry_selftest_helper_ctr): Change
+ fprintf(stderr,...) to syslog(); Correct error output for bulk
+ IV check, plaintext mismatch => ciphertext mismatch.
+
+2013-11-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix Serpent-AVX2 and Camellia-AVX2 counter modes.
+ + commit df29831d008e32faf74091d080a415731418d158
+ * cipher/camellia-aesni-avx2-amd64.S
+ (_gcry_camellia_aesni_avx2_ctr_enc): Byte-swap before checking for
+ overflow handling.
+ * cipher/camellia-glue.c (selftest_ctr_128, selftest_cfb_128)
+ (selftest_cbc_128): Add 16 to nblocks.
+ * cipher/cipher-selftest.c (_gcry_selftest_helper_ctr): Add test with
+ non-overflowing IV and modify overflow IV to detect broken endianness
+ handling.
+ * cipher/serpent-avx2-amd64.S (_gcry_serpent_avx2_ctr_enc): Byte-swap
+ before checking for overflow handling; Fix crazy-mixed-endian IV
+ construction to big-endian.
+ * cipher/serpent.c (selftest_ctr_128, selftest_cfb_128)
+ (selftest_cbc_128): Add 8 to nblocks.
+
+2013-11-09 Sergey V <sftp.mtuci@gmail.com>
+
+ cipher/gost28147: optimization: use precomputed S-box tables.
+ + commit 51501b638546665163bbb85a14308fdb99211a28
+ * cipher/gost.h (GOST28147_context): Remove unneeded subst and
+ subst_set members.
+ * cipher/gost28147.c (max): Remove unneeded macro.
+ (test_sbox): Replace with new precomputed tables.
+ (gost_set_subst): Remove function.
+ (gost_val): Use new S-box tables.
+ (gost_encrypt_block, gost_decrypt_block): Tweak to use new ctx and
+ S-box tables.
+
+2013-11-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix tail handling for AES-NI counter mode.
+ + commit 60ed0abbbc7cb15812f1e713143c72555acea69e
+ * cipher/rijndael.c (do_aesni_ctr): Fix outputting of updated
+ counter-IV.
+
+2013-11-08 Werner Koch <wk@gnupg.org>
+
+ ecc: Improve gcry_pk_get_curve.
+ + commit 03aed1acec611362285db5156a6b92c91604fba4
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Factor some code out
+ to ..
+ (find_domain_parms_idx): new.
+ (_gcry_ecc_get_curve): Find by curve name on error.
+
+ cipher: Avoid signed divisions in idea.c.
+ + commit e241dde1420475459e32608137829e52748d0212
+ * cipher/idea.c (mul_inv): Use unsigned division.
+
+ ecc: Implement the "nocomp" flag for key generation.
+ + commit 9f63c0f7a3b2c15c7e258cd17395cabd0a8f00cc
+ * cipher/ecc.c (ecc_generate): Support the "nocomp" flag.
+ * tests/keygen.c (check_ecc_keys): Add a test for it.
+
+ ecc: Make "noparam" the default and replace by "param".
+ + commit ed45fd2e60c88e2f005282e6eadd018b59dcf65b
+ * src/cipher.h (PUBKEY_FLAG_NOCOMP): New.
+ (PUBKEY_FLAG_NOPARAM): Remove.
+ (PUBKEY_FLAG_PARAM): New.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Support the new
+ flags and ignore the obsolete "noparam" flag.
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Return the curve name
+ also for curves selected by NBITS.
+ (_gcry_mpi_ec_new): Support the "param" flag.
+ * cipher/ecc.c (ecc_generate, ecc_sign, ecc_verify): Ditto.
+ * tests/keygen.c (check_ecc_keys): Remove the "noparam" flag.
+
+2013-11-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix decryption function size in AES AMD64 assembly.
+ + commit bfe4f6523b80bae0040328ef324b9000ee5b38a4
+ * cipher/rijndael-amd64.S (_gcry_aes_amd64_decrypt_block): Set '.size'
+ for '_gcry_aes_amd64_decrypt_block', not '..._encrypt_block'.
+
+ Change 64-bit shift to 32-bit in AES AMD64 assembly.
+ + commit 57b296ea3a5204cd3711b7bf57c8fb14d8542402
+ * cipher/rijndael-amd64.S (do16bit_shr): Change 'shrq' to 'shrl'.
+
+2013-11-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Speed-up AES-NI key setup.
+ + commit f702d62d888b30e24c19f203566a1473098b2b31
+ * cipher/rijndael.c [USE_AESNI] (m128i_t): Remove.
+ [USE_AESNI] (u128_t): New.
+ [USE_AESNI] (aesni_do_setkey): New.
+ (do_setkey) [USE_AESNI]: Move AES-NI accelerated key setup to
+ 'aesni_do_setkey'.
+ (do_setkey): Call _gcry_get_hw_features only once. Clear stack after
+ use in generic key setup part.
+ (rijndael_setkey): Remove stack burning.
+ (prepare_decryption) [USE_AESNI]: Use 'u128_t' instead of 'm128i_t' to
+ avoid compiler generated SSE2 instructions and XMM register usage,
+ unroll 'aesimc' setup loop
+ (prepare_decryption): Clear stack after use.
+ [USE_AESNI] (do_aesni_enc_aligned): Update comment about alignment.
+ (do_decrypt): Do not burning stack after prepare_decryption.
+
+ Avoid burn stack in Arcfour setkey.
+ + commit a50a6ba3540f49fc7dcdb32e691327d5942e3509
+ * cipher/arcfour.c (arcfour_setkey): Remove stack burning.
+
+ Avoid burn_stack in CAST5 setkey.
+ + commit 5797ebc268b4e953cedd0c729c5cdb1f8fd764e4
+ * cipher/cast5.c (do_cast_setkey): Use wipememory instead of memset.
+ (cast_setkey): Remove stack burning.
+
+ Improve Serpent key setup speed.
+ + commit 9897ccb381503455edc490679b2e9251a09ac5cb
+ * cipher/serpent.c (SBOX, SBOX_INVERSE): Remove index argument.
+ (serpent_subkeys_generate): Use smaller temporary arrays for subkey
+ generation and perform stack clearing locally.
+ (serpent_setkey_internal): Use wipememory to clear stack and remove
+ _gcry_burn_stack.
+ (serpent_setkey): Remove unneeded _gcry_burn_stack.
+
+ Modify encrypt/decrypt arguments for in-place.
+ + commit b8515aa70b00baba3fba8121ed305edcd029c8c7
+ * cipher/cipher.c (gcry_cipher_encrypt, gcry_cipher_decrypt): Modify
+ local arguments if in-place operation.
+
+ Speed up Stribog.
+ + commit a48d07ccadee4cb8b666a9a4ba2f00129bad5b2f
+ * cipher/stribog.c (STRIBOG_TABLES): Remove.
+ (Pi): Remove.
+ [!STRIBOG_TABLES] (A, strido): Remove.
+ (stribog_table): New table pre-reordered with Pi values.
+ (strido): Rewrite for new table.
+ (LPSX): Rewrite for new table.
+ (xor): Remove.
+ (g): Small tweaks.
+
+ Tweak AES-NI bulk CTR mode slightly.
+ + commit 3b5058b58a183fa23ecf3ef819e2ae6ac64c0216
+ * cipher/rijndael.c [USE_AESNI] (aesni_cleanup_2_5): Rename to...
+ (aesni_cleanup_2_6): ...this and clear also 'xmm6'.
+ [USE_AESNI && __i386__] (do_aesni_ctr, do_aesni_ctr_4): Prevent
+ inlining only on i386, allow on AMD64.
+ [USE_AESNI] (do_aesni_ctr, do_aesni_ctr_4): Use counter block from
+ 'xmm5' and byte-swap mask from 'xmm6'.
+ (_gcry_aes_ctr_enc) [USE_AESNI]: Preload counter block to 'xmm5' and
+ byte-swap mask to 'xmm6'.
+ (_gcry_aes_ctr_enc, _gcry_aes_cfb_dec, _gcry_aes_cbc_dec): Use
+ 'aesni_cleanup_2_6'.
+
+ Tweak bench-slope parameters.
+ + commit 7e98eecc1a955bc253765f92a166b6560f085b8c
+ * tests/bench-slope.c (BUF_STEP_SIZE): Half step size to 64.
+ (NUM_MEASUREMENT_REPETITIONS): Double repetitions to 64.
+
+ Optimize Blowfish weak key check.
+ + commit 8e1c0f9b894c39b6554c544208dc000682f520c7
+ * cipher/blowfish.c (hashset_elem, val_to_hidx, add_val): New.
+ (do_bf_setkey): Use faster algorithm for detecting weak keys.
+ (bf_setkey): Move stack burning to do_bf_setkey.
+
+ Fix __builtin_bswap32/64 checks.
+ + commit 2590a5df6f5fc884614c8c379324027d2d61b9b5
+ * configure.ac (gcry_cv_have_builtin_bswap32)
+ (gcry_cv_have_builtin_bswap64): Change compile checks to link checks.
+
+ Fix 'u32' build error with Camellia.
+ + commit 84bcb400e7db7268abfc29b5ab1513b0c063b293
+ * cipher/camellia.c: Add include for <config.h> and "types.h".
+ (u32): Remove.
+ (u8): Typedef as 'byte'.
+
+2013-11-06 Werner Koch <wk@gnupg.org>
+
+ pubkey: Add forward compatibility feature.
+ + commit 6d169b654c7ff04c10f73afe80b2c70cefa410c1
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Add
+ "igninvflag".
+
+2013-11-05 Werner Koch <wk@gnupg.org>
+
+ ecc: Require "eddsa" flag for curve Ed25519.
+ + commit b9fd3988b54b50109f4e7179e7fe0739bb1d97c5
+ * src/cipher.h (PUBKEY_FLAG_ECDSA): Remove.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Remove "ecdsa".
+ * cipher/ecc.c (ecc_generate, ecc_sign, ecc_verify): Require "eddsa" flag.
+ * cipher/ecc-misc.c (_gcry_ecc_compute_public): Depend "eddsa" flag.
+ * tests/benchmark.c, tests/keygen.c, tests/pubkey.c
+ * tests/t-ed25519.c, tests/t-mpi-point.c: Adjust for changed flags.
+
+ ecc: Fully implement Ed25519 compression in ECDSA mode.
+ + commit f09ffe8a4802af65a116e79eceeb1cb4ed4fa2f4
+ * src/ec-context.h (mpi_ec_ctx_s): Add field FLAGS.
+ * mpi/ec.c (ec_p_init): Add arg FLAGS. Change all callers to pass it.
+ * cipher/ecc-curves.c (point_from_keyparam): Add arg EC, parse as
+ opaque mpi and use eddsa decoding depending on the flag.
+ (_gcry_mpi_ec_new): Rearrange to parse Q and D after knowing the
+ curve.
+
+ mpi: Add function gcry_mpi_set_opaque_copy.
+ + commit 630aca794ddf057fb7265b7dc346374743036af4
+ * src/gcrypt.h.in (gcry_mpi_set_opaque_copy): New.
+ * src/visibility.c (gcry_mpi_set_opaque_copy): New.
+ * src/visibility.h (gcry_mpi_set_opaque_copy): Mark visible.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add new API.
+ * tests/mpitests.c (test_opaque): Add test.
+
+2013-11-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Make test vectors 'static const'
+ + commit d50a88d1e29124d038196fec6082fd093e922604
+ * cipher/arcfour.c (selftest): Change test vectors to 'static const'.
+ * cipher/blowfish.c (selftest): Ditto.
+ * cipher/camellia-glue.c (selftest): Ditto.
+ * cipher/cast5.c (selftest): Ditto.
+ * cipher/des.c (selftest): Ditto.
+ * cipher/rijndael.c (selftest): Ditto.
+ * tests/basic.c (cipher_cbc_mac_cipher, check_aes128_cbc_cts_cipher)
+ (check_ctr_cipher, check_cfb_cipher, check_ofb_cipher)
+ (check_ccm_cipher, check_stream_cipher)
+ (check_stream_cipher_large_block, check_bulk_cipher_modes)
+ (check_ciphers, check_digests, check_hmac, check_pubkey_sign)
+ (check_pubkey_sign_ecdsa, check_pubkey_crypt, check_pubkey): Ditto.
+
+2013-11-03 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Make jump labels local in Salsa20 assembly.
+ + commit d4697862266f3c96b6946dc92139dd8f3e81e5f6
+ * cipher/salsa20-amd64.S: Rename '._labels' to '.L_labels'.
+ * cipher/salsa20-armv7-neon.S: Ditto.
+
+2013-10-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ bithelp: fix undefined behaviour with rol and ror.
+ + commit d1cadd145199040299538891ab2ccd1208f7776e
+ * cipher/bithelp.h (rol, ror): Mask shift with 31.
+
+2013-10-29 Werner Koch <wk@gnupg.org>
+
+ tests: Add feature to skip benchmarks.
+ + commit ba6bffafd17bea11985afc500022d66da261d59a
+ * tests/benchmark.c (main): Add feature to skip the test.
+ * tests/bench-slope.c (main): Ditto.
+ (get_slope): Repace C++ style comment.
+ (double_cmp, cipher_bench, _hash_bench): Repalce system reserved
+ symbols.
+
+ ecc: Finish Ed25519/ECDSA hack.
+ + commit c284f15db99e9cb135612de710199abb23baafd3
+ * cipher/ecc.c (ecc_generate): Fix Ed25519/ECDSA case.
+ (ecc_verify): Implement ED25519/ECDSA uncompression.
+
+ ecc: Add flags "noparam" and "comp".
+ + commit ba892a0a874c8b2a83dbf0940608cd7e2911ce01
+ * src/cipher.h (PUBKEY_FLAG_NOPARAM, PUBKEY_FLAG_COMP): New.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Parse new flags
+ and change code for possible faster parsing.
+ * cipher/ecc.c (ecc_generate): Implement the "noparam" flag.
+ (ecc_sign): Ditto.
+ (ecc_verify): Ditto.
+ * tests/keygen.c (check_ecc_keys): Use the "noparam" flag.
+
+ * cipher/ecc.c (ecc_generate): Fix parsing of the deprecated
+ transient-flag parameter.
+ (ecc_verify): Do not make Q optional in the extract-param call.
+
+2013-10-28 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix typos in documentation.
+ + commit 1faa61845f180bd47e037e400dde2d864ee83c89
+ * doc/gcrypt.texi: Fix some typos.
+
+ Add ARM NEON assembly implementation of Serpent.
+ + commit 2cb6e1f323d24359b1c5b113be5c2f79a2a4cded
+ * cipher/Makefile.am: Add 'serpent-armv7-neon.S'.
+ * cipher/serpent-armv7-neon.S: New.
+ * cipher/serpent.c (USE_NEON): New macro.
+ (serpent_context_t) [USE_NEON]: Add 'use_neon'.
+ [USE_NEON] (_gcry_serpent_neon_ctr_enc, _gcry_serpent_neon_cfb_dec)
+ (_gcry_serpent_neon_cbc_dec): New prototypes.
+ (serpent_setkey_internal) [USE_NEON]: Detect NEON support.
+ (_gcry_serpent_neon_ctr_enc, _gcry_serpent_neon_cfb_dec)
+ (_gcry_serpent_neon_cbc_dec) [USE_NEON]: Use NEON implementations
+ to process eight blocks in parallel.
+ * configure.ac [neonsupport]: Add 'serpent-armv7-neon.lo'.
+
+ Add ARM NEON assembly implementation of Salsa20.
+ + commit 3ff9d2571c18cd7a34359f9c60a10d3b0f932b23
+ * cipher/Makefile.am: Add 'salsa20-armv7-neon.S'.
+ * cipher/salsa20-armv7-neon.S: New.
+ * cipher/salsa20.c [USE_ARM_NEON_ASM]: New macro.
+ (struct SALSA20_context_s, salsa20_core_t, salsa20_keysetup_t)
+ (salsa20_ivsetup_t): New.
+ (SALSA20_context_t) [USE_ARM_NEON_ASM]: Add 'use_neon'.
+ (SALSA20_context_t): Add 'keysetup', 'ivsetup' and 'core'.
+ (salsa20_core): Change 'src' argument to 'ctx'.
+ [USE_ARM_NEON_ASM] (_gcry_arm_neon_salsa20_encrypt): New prototype.
+ [USE_ARM_NEON_ASM] (salsa20_core_neon, salsa20_keysetup_neon)
+ (salsa20_ivsetup_neon): New.
+ (salsa20_do_setkey): Setup keysetup, ivsetup and core with default
+ functions.
+ (salsa20_do_setkey) [USE_ARM_NEON_ASM]: When NEON support detect,
+ set keysetup, ivsetup and core with ARM NEON functions.
+ (salsa20_do_setkey): Call 'ctx->keysetup'.
+ (salsa20_setiv): Call 'ctx->ivsetup'.
+ (salsa20_do_encrypt_stream) [USE_ARM_NEON_ASM]: Process large buffers
+ in ARM NEON implementation.
+ (salsa20_do_encrypt_stream): Call 'ctx->core' instead of directly
+ calling 'salsa20_core'.
+ (selftest): Add test to check large buffer processing and block counter
+ updating.
+ * configure.ac [neonsupport]: 'Add salsa20-armv7-neon.lo'.
+
+ Add AMD64 assembly implementation of Salsa20.
+ + commit 5a3d43485efdc09912be0967ee0a3ce345b3b15a
+ * cipher/Makefile.am: Add 'salsa20-amd64.S'.
+ * cipher/salsa20-amd64.S: New.
+ * cipher/salsa20.c (USE_AMD64): New macro.
+ [USE_AMD64] (_gcry_salsa20_amd64_keysetup, _gcry_salsa20_amd64_ivsetup)
+ (_gcry_salsa20_amd64_encrypt_blocks): New prototypes.
+ [USE_AMD64] (salsa20_keysetup, salsa20_ivsetup, salsa20_core): New.
+ [!USE_AMD64] (salsa20_core): Change 'src' to non-constant, update block
+ counter in 'salsa20_core' and return burn stack depth.
+ [!USE_AMD64] (salsa20_keysetup, salsa20_ivsetup): New.
+ (salsa20_do_setkey): Move generic key setup to 'salsa20_keysetup'.
+ (salsa20_setkey): Fix burn stack depth.
+ (salsa20_setiv): Move generic IV setup to 'salsa20_ivsetup'.
+ (salsa20_do_encrypt_stream) [USE_AMD64]: Process large buffers in AMD64
+ implementation.
+ (salsa20_do_encrypt_stream): Move stack burning to this function...
+ (salsa20_encrypt_stream, salsa20r12_encrypt_stream): ...from these
+ functions.
+ * configure.ac [x86-64]: Add 'salsa20-amd64.lo'.
+
+ Add new benchmarking utility, bench-slope.
+ + commit e214e8392671dd30e9c33260717b5e756debf3bf
+ * tests/Makefile.am (TESTS): Add 'bench-slope'.
+ * tests/bench-slope.c: New.
+
+ Change .global to .globl in assembly files.
+ + commit ebc8abfcb09d6106fcfce40f240a513e276f46e9
+ * cipher/blowfish-arm.S: Change '.global' to '.globl'.
+ * cipher/camellia-aesni-avx-amd64.S: Ditto.
+ * cipher/camellia-aesni-avx2-amd64.S: Ditto.
+ * cipher/camellia-arm.S: Ditto.
+ * cipher/cast5-amd64.S: Ditto.
+ * cipher/rijndael-amd64.S: Ditto.
+ * cipher/rijndael-arm.S: Ditto.
+ * cipher/serpent-avx2-amd64.S: Ditto.
+ * cipher/serpent-sse2-amd64.S: Ditto.
+ * cipher/twofish-amd64.S: Ditto.
+ * cipher/twofish-arm.S: Ditto.
+
+2013-10-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Deduplicate code for ECB encryption and decryption.
+ + commit 51f1beab3d1e879942a95f58b08de7dbcce75dce
+ * cipher/cipher.c (do_ecb_crypt): New, based on old 'do_ecb_encrypt'.
+ (do_ecb_encrypt): Use 'do_ecb_crypt', pass encryption function.
+ (do_ecb_decrypt): Use 'do_ecb_crypt', pass decryption function.
+
+2013-10-26 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Drop _gcry_cipher_ofb_decrypt as it duplicates _gcry_cipher_ofb_encrypt.
+ + commit d9431725952e40f201c7eda000d3c8511ebd5b33
+ * cipher/cipher.c (cipher_decrypt): Use _gcry_cipher_ofb_encrypt for OFB
+ decryption.
+ * cipher/cipher-internal.h: Remove _gcry_cipher_ofb_decrypt declaration.
+ * cipher/cipher-ofb.c (_gcry_cipher_ofb_decrypt): Remove.
+ (_gcry_cipher_ofb_encrypt): remove copying of IV to lastiv, it's
+ unused there.
+
+2013-10-25 Werner Koch <wk@gnupg.org>
+
+ tests: Add tests for mpi_cmp.
+ + commit 6c6d4810927de7310ae7bac61b4ff5467d7cb485
+ * tests/mpitests.c (die): Modernize.
+ (fail): New.
+ (test_opaque, test_add, test_sub, test_mul): Use gcry_log_xx
+ (main): Return error count.
+ (test_cmp): New.
+
+2013-10-24 Werner Koch <wk@gnupg.org>
+
+ ecc: Change algorithm for Ed25519 x recovery.
+ + commit c630fd71b336eb9209e914d24dc1e26a34521882
+ * cipher/ecc-eddsa.c (scanval): Add as temporary hack.
+ (_gcry_ecc_eddsa_recover_x): Use the algorithm from page 15 of the
+ paper. Return an error code.
+ (_gcry_ecc_eddsa_decodepoint): Take care of the error code.
+ * mpi/mpi-mul.c (gcry_mpi_mulm): Use truncated division.
+
+ ecc: Refactor _gcry_ecc_eddsa_decodepoint.
+ + commit 1cf5699b6febab1ef9d300531acc2ee33a7df739
+ * cipher/ecc-eddsa.c (_gcry_ecc_eddsa_decodepoint): Factor some code
+ out to ..
+ (_gcry_ecc_eddsa_recover_x): new.
+
+2013-10-24 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ ecc-gost: Add missing include.
+ + commit 9ce54e5b512418ddf45ce18f2cbd48cdced779f5
+ * ecc-gost.c: Include "pubkey-internal.h".
+
+2013-10-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Replace architecture specific fast_wipememory2 with generic.
+ + commit 54df6fcd806f8c150cffe6cc09925bb8b638bb5b
+ * src/g10lib.h (fast_wipememory2): Remove architecture specific
+ implementations and add generic implementation.
+
+ Improve the speed of the cipher mode code.
+ + commit 293e93672fdabc829e35cc624c397276342bafe4
+ * cipher/bufhelp.h (buf_cpy): New.
+ (buf_xor, buf_xor_2dst): If buffers unaligned, always jump to per-byte
+ processing.
+ (buf_xor_n_copy_2): New.
+ (buf_xor_n_copy): Use 'buf_xor_n_copy_2'.
+ * cipher/blowfish.c (_gcry_blowfish_cbc_dec): Avoid extra memory copy
+ and use new 'buf_xor_n_copy_2'.
+ * cipher/camellia-glue.c (_gcry_camellia_cbc_dec): Ditto.
+ * cipher/cast5.c (_gcry_cast_cbc_dec): Ditto.
+ * cipher/serpent.c (_gcry_serpent_cbc_dec): Ditto.
+ * cipher/twofish.c (_gcry_twofish_cbc_dec): Ditto.
+ * cipher/rijndael.c (_gcry_aes_cbc_dec): Ditto.
+ (do_encrypt, do_decrypt): Use 'buf_cpy' instead of 'memcpy'.
+ (_gcry_aes_cbc_enc): Avoid copying IV, use 'last_iv' pointer instead.
+ * cipher/cipher-cbc.c (_gcry_cipher_cbc_encrypt): Avoid copying IV,
+ update pointer to IV instead.
+ (_gcry_cipher_cbc_decrypt): Avoid extra memory copy and use new
+ 'buf_xor_n_copy_2'.
+ (_gcry_cipher_cbc_encrypt, _gcry_cipher_cbc_decrypt): Avoid extra
+ accesses to c->spec, use 'buf_cpy' instead of memcpy.
+ * cipher/cipher-ccm.c (do_cbc_mac): Ditto.
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb_encrypt)
+ (_gcry_cipher_cfb_decrypt): Ditto.
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Ditto.
+ * cipher/cipher-ofb.c (_gcry_cipher_ofb_encrypt)
+ (_gcry_cipher_ofb_decrypt): Ditto.
+ * cipher/cipher.c (do_ecb_encrypt, do_ecb_decrypt): Ditto.
+
+ bufhelp: enable unaligned memory accesses for AArch64 (64-bit ARM)
+ + commit 2901a10dbf1264707debc8402546c07eeac60932
+ * cipher/bufhelp.h [__aarch64__] (BUFHELP_FAST_UNALIGNED_ACCESS): Set
+ macro on AArch64.
+
+2013-10-23 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Enable assembler optimizations on earlier ARM cores.
+ + commit 2fd83faa876d0be91ab7884b1a9eaa7793559eb9
+ * cipher/blowfish-armv6.S => cipher/blowfish-arm.S: adapt to pre-armv6 CPUs.
+ * cipher/blowfish.c: enable assembly on armv4/armv5 little-endian CPUs.
+ * cipher/camellia-armv6.S => cipher/camellia-arm.S: adapt to pre-armv6 CPUs.
+ * cipher/camellia.c, cipher-camellia-glue.c: enable assembly on armv4/armv5
+ little-endian CPUs.
+ * cipher/cast5-armv6.S => cipher/cast5-arm.S: adapt to pre-armv6 CPUs.
+ * cipher/cast5.c: enable assembly on armv4/armv5 little-endian CPUs.
+ * cipher/rijndael-armv6.S => cipher/rijndael-arm.S: adapt to pre-armv6 CPUs.
+ * cipher/rijndael.c: enable assembly on armv4/armv5 little-endian CPUs.
+ * cipher/twofish-armv6.S => cipher/twofish-arm.S: adapt to pre-armv6 CPUs.
+ * cipher/twofish.c: enable assembly on armv4/armv5 little-endian CPUs.
+
+ mpi: enable assembler on all arm architectures.
+ + commit 0b39fce7e3ce6761d6bd5195d093ec6857edb7c2
+ * mpi/config.links: remove check for arm >= v6
+ * mpi/armv6 => mpi/arm: rename directory to reflect that is is generic
+ enough
+
+ Correct ASM assembly test in configure.ac.
+ + commit 10bf6a7e16ed193f90d2749970a420f00d1d3320
+ * configure.ac: correct HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS test to
+ require neither ARMv6, nor thumb mode. Our assembly code works
+ perfectly even on ARMv4 now.
+
+2013-10-23 Werner Koch <wk@gnupg.org>
+
+ ecc: Refactor ecc.c.
+ + commit 164eb8c85d773ef4f0939115ec45f5e4b47c1700
+ * cipher/ecc-ecdsa.c, cipher/ecc-eddsa.c, cipher/ecc-gost.c: New.
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add new files.
+ * configure.ac (GCRYPT_PUBKEY_CIPHERS): Add new files.
+ * cipher/ecc.c (point_init, point_free): Move to ecc-common.h.
+ (sign_ecdsa): Move to ecc-ecdsa.c as _gcry_ecc_ecdsa_sign.
+ (verify_ecdsa): Move to ecc-ecdsa.c as _gcry_ecc_ecdsa_verify.
+ (sign_gost): Move to ecc-gots.c as _gcry_ecc_gost_sign.
+ (verify_gost): Move to ecc-gost.c as _gcry_ecc_gost_verify.
+ (sign_eddsa): Move to ecc-eddsa.c as _gcry_ecc_eddsa_sign.
+ (verify_eddsa): Move to ecc-eddsa.c as _gcry_ecc_eddsa_verify.
+ (eddsa_generate_key): Move to ecc-eddsa.c as _gcry_ecc_eddsa_genkey.
+ (reverse_buffer): Move to ecc-eddsa.c.
+ (eddsa_encodempi, eddsa_encode_x_y): Ditto.
+ (_gcry_ecc_eddsa_encodepoint, _gcry_ecc_eddsa_decodepoint): Ditto.
+
+ mpi: Fix scanning of negative SSH formats and add more tests.
+ + commit 45f6e6268bfdc4b608beaba6b7086b2286e33c71
+ * mpi/mpicoder.c (gcry_mpi_scan): Fix sign setting for SSH format.
+ * tests/t-convert.c (negative_zero): Test all formats.
+ (check_formats): Add tests for PGP and scan tests for SSH and USG.
+
+ * src/gcrypt.h.in (mpi_is_neg): Fix macro.
+
+ * mpi/mpi-scan.c (_gcry_mpi_getbyte, _gcry_mpi_putbyte): Comment out
+ these unused functions.
+
+2013-10-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ twofish: add ARMv6 assembly implementation.
+ + commit 98674fdaa30ab22a3ac86ca05d688b5b6112895d
+ * cipher/Makefile.am: Add 'twofish-armv6.S'.
+ * cipher/twofish-armv6.S: New.
+ * cipher/twofish.c (USE_ARMV6_ASM): New macro.
+ [USE_ARMV6_ASM] (_gcry_twofish_armv6_encrypt_block)
+ (_gcry_twofish_armv6_decrypt_block): New prototypes.
+ [USE_AMDV6_ASM] (twofish_encrypt, twofish_decrypt): Add.
+ [USE_AMD64_ASM] (do_twofish_encrypt, do_twofish_decrypt): Remove.
+ (_gcry_twofish_ctr_enc, _gcry_twofish_cfb_dec): Use 'twofish_encrypt'
+ instead of 'do_twofish_encrypt'.
+ (_gcry_twofish_cbc_dec): Use 'twofish_decrypt' instead of
+ 'do_twofish_decrypt'.
+ * configure.ac [arm]: Add 'twofish-armv6.lo'.
+
+ mpi: allow building with clang on ARM.
+ + commit e67c67321ce240c93dd0fa2b21c649c0a8e233f7
+ * mpi/longlong.h [__arm__] (add_ssaaaa, sub_ddmmss, umul_ppmm)
+ (count_leading_zeros): Do not cast assembly output arguments.
+ [__arm__] (umul_ppmm): Remove the extra '%' ahead of assembly comment.
+ [_ARM_ARCH >= 4] (umul_ppmm): Use correct inputs and outputs instead of
+ registers.
+
+ serpent-amd64: do not use GAS macros.
+ + commit c7efaa5fe0ee92e321a7b49d56752cc12eb75fe0
+ * cipher/serpent-avx2-amd64.S: Remove use of GAS macros.
+ * cipher/serpent-sse2-amd64.S: Ditto.
+ * configure.ac [HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS]: Do not check
+ for GAS macros.
+
+ Add Counter with CBC-MAC mode (CCM)
+ + commit 335d9bf7b035815750b63a3a8334d6ce44dc4449
+ * cipher/Makefile.am: Add 'cipher-ccm.c'.
+ * cipher/cipher-ccm.c: New.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Add 'u_mode'.
+ (_gcry_cipher_ccm_encrypt, _gcry_cipher_ccm_decrypt)
+ (_gcry_cipher_ccm_set_nonce, _gcry_cipher_ccm_authenticate)
+ (_gcry_cipher_ccm_get_tag, _gcry_cipher_ccm_check_tag)
+ (_gcry_cipher_ccm_set_lengths): New prototypes.
+ * cipher/cipher.c (gcry_cipher_open, cipher_encrypt, cipher_decrypt)
+ (_gcry_cipher_setiv, _gcry_cipher_authenticate, _gcry_cipher_gettag)
+ (_gcry_cipher_checktag, gry_cipher_ctl): Add handling for CCM mode.
+ * doc/gcrypt.texi: Add documentation for GCRY_CIPHER_MODE_CCM.
+ * src/gcrypt.h.in (gcry_cipher_modes): Add 'GCRY_CIPHER_MODE_CCM'.
+ (gcry_ctl_cmds): Add 'GCRYCTL_SET_CCM_LENGTHS'.
+ (GCRY_CCM_BLOCK_LEN): New.
+ * tests/basic.c (check_ccm_cipher): New.
+ (check_cipher_modes): Call 'check_ccm_cipher'.
+ * tests/benchmark.c (ccm_aead_init): New.
+ (cipher_bench): Add handling for AEAD modes and add CCM benchmarking.
+
+ Add API to support AEAD cipher modes.
+ + commit 95654041f2aa62f71aac4d8614dafe8433d10f95
+ * cipher/cipher.c (_gcry_cipher_authenticate, _gcry_cipher_checktag)
+ (_gcry_cipher_gettag): New.
+ * doc/gcrypt.texi: Add documentation for new API functions.
+ * src/visibility.c (gcry_cipher_authenticate, gcry_cipher_checktag)
+ (gcry_cipher_gettag): New.
+ * src/gcrypt.h.in, src/visibility.h: add declarations of these
+ functions.
+ * src/libgcrypt.defs, src/libgcrypt.vers: export functions.
+
+2013-10-22 NIIBE Yutaka <gniibe@fsij.org>
+
+ ecc: Correct compliant key generation for Edwards curves.
+ + commit a5a277a9016ccb34f1858a65e0ed1791b2fc3db3
+ * cipher/ecc.c: Add case for Edwards curves.
+
+2013-10-17 Werner Koch <wk@gnupg.org>
+
+ tests: Add test options to keygen.
+ + commit f7711e6eb5f02d03c74911f6f037ab28075e7c0d
+ * tests/keygen.c (usage): New.
+ (main): Print usage info. Allow running just one algo.
+
+ mpi: Do not clear the sign of the mpi_mod result.
+ + commit 91e007606f1f6f8e1416c403fe809d47fddf9b1f
+ * mpi/mpi-mod.c (_gcry_mpi_mod): Remove sign setting.
+
+ ecc: Put the curve name again into the output of gcry_pk_genkey.
+ + commit 4776dcd394ce59fa50d959921857b3427c5a63c8
+ * cipher/ecc.c (ecc_generate): Use the correct var. Release
+ CURVE_FLAGS.
+
+ ecc: Support Weierstrass curves in gcry_mpi_ec_curve_point.
+ + commit b22417158c50ec3a0b2ff55b4ade063b42a87e8f
+ * mpi/ec.c (_gcry_mpi_ec_curve_point): Support MPI_EC_WEIERSTRASS.
+
+2013-10-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ arcfour: more optimized version for non-i386 architectures.
+ + commit f9371c026aad09ff48746d22c8333746c886e773
+ * cipher/arcfour.c (ARCFOUR_context): Reorder members.
+ (do_encrypt_stream) [!__i386__]: Faster implementation for non-i386.
+ (do_arcfour_setkey): Avoid modulo operations.
+
+ Avoid void* pointer arithmetic.
+ + commit c89ab921ccfaefe6c4f6a724d01e0df41a1a381f
+ * tests/tsexp.c (check_extract_param): Cast void* pointers to char*
+ before doing arithmetics.
+
+2013-10-16 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ ecc: Add support for GOST R 34.10-2001/-2012 signatures.
+ + commit 83902f1f1dbc8263a0c3f61be59cd2eb95293c97
+ * src/cipher.h: define PUBKEY_FLAG_GOST
+ * cipher/ecc-curves.c: Add GOST2001-test and GOST2012-test curves
+ defined in standards. Typical applications would use either those
+ curves, or curves defined in RFC 4357 (will be added later).
+ * cipher/ecc.c (sign_gost, verify_gost): New.
+ (ecc_sign, ecc_verify): use sign_gost/verify_gost if PUBKEY_FLAG_GOST
+ is set.
+ (ecc_names): add "gost" for gost signatures.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist,
+ _gcry_pk_util_preparse_sigval): set PUBKEY_FLAG_GOST if gost flag
+ is present in s-exp.
+ * tests/benchmark.c (ecc_bench): also benchmark GOST signatures.
+ * tests/basic.c (check_pubkey): add two public keys from
+ GOST R 34.10-2012 standard.
+ (check_pubkey_sign_ecdsa): add two data sets to check gost signatures.
+ * tests/curves.c: correct N_CURVES as we now have 2 more curves.
+
+
+ Removed some comments from the new curve definitions in ecc-curves.c
+ to avoid line wrapping. Eventually we will develop a precompiler to
+ avoid parsing those hex strings. -wk
+
+ Fix 256-bit ecdsa test key definition.
+ + commit 187b2bb541b985255aee262d181434a7cb4ae2e7
+ * tests/basic.c (check_pubkey): fix nistp256 testing key declaration -
+ add missing comma.
+
+2013-10-16 Werner Koch <wk@gnupg.org>
+
+ sexp: Add function gcry_sexp_extract_param.
+ + commit a329b6abf00c990faf1986f9fbad7b4d71c13bcb
+ * src/gcrypt.h.in (_GCRY_GCC_ATTR_SENTINEL): New.
+ (gcry_sexp_extract_param): New.
+ * src/visibility.c (gcry_sexp_extract_param): New.
+ * src/visibility.h (gcry_sexp_extract_param): Add hack to detect
+ internal use.
+ * cipher/pubkey-util.c (_gcry_pk_util_extract_mpis): Move and split
+ into ...
+ * src/sexp.c (_gcry_sexp_vextract_param)
+ (_gcry_sexp_extract_param): this. Change all callers. Add support for buffer
+ descriptors and a path option/
+
+ * tests/tsexp.c (die, hex2buffer, hex2mpi, hex2mpiopa): New.
+ (cmp_mpihex, cmp_bufhex): New.
+ (check_extract_param): New.
+
+2013-10-16 NIIBE Yutaka <gniibe@fsij.org>
+
+ mpi: mpi-pow improvement.
+ + commit 45aa6131e93fac89d46733b3436d960f35fb99b2
+ * mpi/mpi-pow.c (gcry_mpi_powm): New implementation of left-to-right
+ k-ary exponentiation.
+
+2013-10-15 Werner Koch <wk@gnupg.org>
+
+ ecc: Support use of Ed25519 with ECDSA.
+ + commit 537969fbbb1104b8305a7edb331b7666d54eff2c
+ * src/cipher.h (PUBKEY_FLAG_ECDSA): New.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Add flag "ecdsa".
+ * cipher/ecc.c (verify_ecdsa, verify_eddsa): Remove some debug output.
+ (ecc_generate, ecc_sign, ecc_verify): Support Ed25519 with ECDSA.
+ * tests/keygen.c (check_ecc_keys): Create such a test key.
+ * tests/pubkey.c (fail, info, data_from_hex, extract_cmp_data): New.
+ Take from dsa-6979.c
+ (check_ed25519ecdsa_sample_key): new.
+ (main): Call new test.
+
+2013-10-14 Werner Koch <wk@gnupg.org>
+
+ pubkey: Support flags list in gcry_pk_genkey.
+ + commit d3a605d7827b8a73ef844e9e5183590bd6b1389a
+ * src/cipher.h (PUBKEY_FLAG_TRANSIENT_KEY): New.
+ (PUBKEY_FLAG_USE_X931): New.
+ (PUBKEY_FLAG_USE_FIPS186): New.
+ (PUBKEY_FLAG_USE_FIPS186_2): New.
+ * cipher/pubkey-util.c (_gcry_pk_util_parse_flaglist): Rename from
+ parse_flags_list. Parse new flags.
+ * cipher/dsa.c (dsa_generate): Support flag list.
+ * cipher/ecc.c (ecc_generate): Ditto.
+ * cipher/rsa.c (rsa_generate): Ditto.
+
+ pubkey: Remove duplicated flag parsing code.
+ + commit 5be2345ddec4147e535d5b039ee74f84bcacf9e4
+ * cipher/pubkey-util.c (_gcry_pk_util_preparse_encval)
+ (_gcry_pk_util_data_to_mpi): Factor flag parsing code out to ..
+ (parse_flag_list): New.
+ * src/cipher.h (PUBKEY_FLAG_RAW_FLAG): New.
+
+ mpicalc: Accept lowercase hex digits.
+ + commit 0cd551faa775ad5309a40629ae30bf86b75fca09
+ * src/mpicalc.c (main): Test for lowercase hex digits.
+
+2013-10-11 Werner Koch <wk@gnupg.org>
+
+ pubkey: Move sexp parsing of remaining fucntions to the modules.
+ + commit a951c061523e1c13f1358c9760fc3a9d787ab2d4
+ * cipher/pubkey.c (release_mpi_array): Remove.
+ (pubkey_check_secret_key): Remove.
+ (sexp_elements_extract): Remove.
+ (sexp_elements_extract_ecc): Remove.
+ (sexp_to_key): Remove.
+ (get_hash_algo): Remove.
+ (gcry_pk_testkey): Revamp.
+ (gcry_pk_get_curve): Revamp.
+ * cipher/rsa.c (rsa_check_secret_key): Revamp.
+ * cipher/elgamal.c (elg_check_secret_key): Revamp.
+ * cipher/dsa.c (dsa_check_secret_key): Revamp.
+ * cipher/ecc.c (ecc_check_secret_key): Revamp.
+ * cipher/ecc-curves.c: Include cipher.h and pubkey-internal.h
+ (_gcry_ecc_get_curve): Revamp.
+
+ * cipher/pubkey-util.c (_gcry_pk_util_extract_mpis): Set passed and
+ used parameters on error to NULL.
+
+ pubkey: Move sexp parsing for gcry_pk_decrypt to the modules.
+ + commit 07950c865a901afc48acb46f0695040cadfd5068
+ * cipher/rsa.c (rsa_decrypt): Revamp.
+ * cipher/elgamal.c (elg_decrypt): Revamp.
+ * cipher/ecc.c (ecc_decrypt_raw): Revamp.
+ * cipher/pubkey.c (gcry_pk_decrypt): Simplify.
+ (sexp_to_enc): Remove.
+ * cipher/pubkey-util.c (_gcry_pk_util_preparse_encval): New.
+
+ pubkey: Move sexp parsing for gcry_pk_encrypt to the modules.
+ + commit 6bd5d18c45a4a3ce8f0f66f56c83b80594877f53
+ * cipher/rsa.c (rsa_encrypt): Revamp.
+ * cipher/elgamal.c (elg_encrypt): Revamp.
+ * cipher/ecc.c (ecc_encrypt_raw): Revamp.
+ * cipher/pubkey.c (gcry_pk_encrypt): Simplify.
+
+ * tests/basic.c (check_pubkey_crypt): Init plain, ciph, and data so
+ that they are initialized even after an encrypt failure.
+
+ pubkey: Move sexp parsing for gcry_pk_sign to the modules.
+ + commit d0ae6635e4e6ae273c3a137c513d518f28f6eab3
+ * cipher/rsa.c (rsa_sign): Revamp.
+ * cipher/dsa.c (dsa_sign): Revamp.
+ * cipher/elgamal.c (elg_sign): Revamp.
+ * cipher/ecc.c (ecc_sign): Revamp.
+ * cipher/pubkey.c (gcry_pk_sign): Simplify.
+
+2013-10-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Prevent tail call optimization with _gcry_burn_stack.
+ + commit 150c0313f971bcea62d2802f0389c883e11ebb31
+ * configure.ac: New check, HAVE_GCC_ASM_VOLATILE_MEMORY.
+ * src/g10lib.h (_gcry_burn_stack): Rename to __gcry_burn_stack.
+ (__gcry_burn_stack_dummy): New.
+ (_gcry_burn_stack): New macro.
+ * src/misc.c (_gcry_burn_stack): Rename to __gcry_burn_stack.
+ (__gcry_burn_stack_dummy): New.
+
+2013-10-09 Werner Koch <wk@gnupg.org>
+
+ pubkey: Move sexp parsing for gcry_pk_verify to the modules.
+ + commit 94b652ecb006c29fa2ffb1badc9f02b758581737
+ * cipher/rsa.c (rsa_verify): Revamp.
+ * cipher/dsa.c (dsa_verify): Revamp.
+ * cipher/elgamal.c (elg_verify): Revamp.
+ * cipher/ecc.c (ecc_verify): Revamp.
+ * cipher/pubkey.c (sexp_to_sig): Remove.
+ (pss_verify_cmp): Move to pubkey-util.c
+ (sexp_data_to_mpi): Ditto.
+ (init_encoding_ctx): Ditto.
+ (gcry_pk_verify): Simplify.
+ * cipher/pubkey-util.c (_gcry_pk_util_init_encoding_ctx): Add. Take
+ from pubkey.c
+ (get_hash_algo): Ditto.
+ (_gcry_pk_util_data_to_mpi): Ditto.
+ (pss_verify_cmp): Ditto.
+ (_gcry_pk_util_extract_mpis): New.
+ (_gcry_pk_util_preparse_sigval): New.
+ (_gcry_pk_util_free_encoding_ctx): New.
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Make curve init
+ optional.
+
+ * src/g10lib.h (GCC_ATTR_SENTINEL): New.
+
+ * tests/basic.c (check_pubkey_sign): Print the algo name.
+ (main): Add option --pubkey.
+
+2013-10-08 Werner Koch <wk@gnupg.org>
+
+ pubkey: Move sexp parsing for gcry_pk_get_nbits to the modules.
+ + commit 4645f3728bb0900591b0aef85831fdee52c59e3c
+ * cipher/pubkey.c (spec_from_sexp): New.
+ (gcry_pk_get_nbits): Simplify.
+ * cipher/rsa.c (rsa_get_nbits): Take only PARMS as args and do sexp
+ parsing here.
+ * cipher/dsa.c (dsa_get_nbits): Ditto.
+ * cipher/elgamal.c (elg_get_nbits): Ditto.
+ * cipher/ecc.c (ecc_get_nbits): Ditto.
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Allow NULL for arg
+ CURVE.
+
+ pubkey: Move sexp parsing for gcry_pk_getkey to the modules.
+ + commit 3816e46ce211e63adf46dbc775510aa137572248
+ * cipher/pubkey-util.c: New.
+ (_gcry_pk_util_get_nbits): New. Based on code from gcry_pk_genkey.
+ (_gcry_pk_util_get_rsa_use_e): Ditto.
+ * cipher/pubkey.c (gcry_pk_genkey): Strip most code and pass.
+ * cipher/rsa.c (rsa_generate): Remove args ALGO, NBITS and EVALUE.
+ Call new fucntions to get these values.
+ * cipher/dsa.c (dsa_generate): Remove args ALGO, NBITS and EVALUE.
+ Call _gcry_pk_util_get_nbits to get nbits. Always parse genparms.
+ * cipher/elgamal.c (elg_generate): Ditto.
+ * cipher/ecc.c (ecc_generate): Ditto.
+
+ cipher: Deprecate GCRY_PK_ELG_E.
+ + commit f79d3e13d3229115c47cbe5007647cb44105fe3f
+ * cipher/elgamal.c (_gcry_pubkey_spec_elg_e): Remove.
+ * cipher/pubkey.c (pubkey_list): Remove double included
+ _gcry_pubkey_spec_elg.
+ (map_algo): MAke ELG_E to ELG.
+
+2013-10-02 Werner Koch <wk@gnupg.org>
+
+ Provide Pth compatiblity for use with GnuPG 2.0.
+ + commit 2f767f6a17f7e99da4075882f7fe3ca597b31bdb
+ * src/ath.c (ath_install): Call ath_init and declare Pth as
+ compatible.
+
+2013-10-02 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ sha512: fix building on ARM.
+ + commit 6410152338a2b2ac1216e70c153cd16f9199c94e
+ * cipher/sha512.c (transform) [USE_ARM_NEON_ASM]: Fix 'hd' to 'ctx'.
+
+2013-10-02 Werner Koch <wk@gnupg.org>
+
+ Remove deprecated control codes.
+ + commit f04a1db22d982627ba87da4e5df52df9b994c779
+ * src/gcrypt.h.in (GCRYCTL_SET_KEY): Remove.
+ (GCRYCTL_SET_IV): Remove.
+ (GCRYCTL_SET_CTR): Remove.
+ * cipher/md.c (gcry_md_ctl): Remove deprecated GCRYCTL_SET_KEY.
+ * cipher/cipher.c (gcry_cipher_ctl): Remove deprecated
+ GCRYCTL_SET_KEY, GCRYCTL_SET_IV, GCRYCTL_SET_CTR.
+
+2013-10-02 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Fix errors when building with Clang on PPC.
+ + commit 33757c1e03f1d885920633edf543cd1c77999455
+ * mpi/longlong.h (add_ssaaaa, sub_ddmmss, count_leading_zeros,
+ umul_ppmm): Do not cast asm output to USItype.
+
+2013-10-02 Werner Koch <wk@gnupg.org>
+
+ Remove last remains of the former module system.
+ + commit 628ed5ba0ef4b1f04b5a77e29e4bc49a1fe13c07
+ * src/gcrypt-module.h, src/module.c: Remove.
+ * src/visibility.h: Do not include gcrypt-module.h.
+ * src/g10lib.h: Remove all prototypes from module.c
+ (gcry_module): Remove.
+ * cipher/cipher-internal.h (gcry_cipher_handle): Remove unused field.
+
+ Fix missing prototype warning in visibility.c.
+ + commit 52783d483293d48cd468143ae6ae2cccbfe17200
+ * src/ec-context.h (_gcry_mpi_ec_new): Move prototype to mpi.h.
+
+ md: Simplify the message digest dispatcher md.c.
+ + commit 0d39997932617ba20656f8bcc230ba744b76c87e
+ * src/gcrypt-module.h (gcry_md_spec_t): Move to ...
+ * src/cipher-proto.h: here. Merge with md_extra_spec_t. Add fields
+ ALGO and FLAGS. Set these fields in all digest modules.
+ * cipher/md.c: Change most code to replace the former module
+ system by a simpler system to gain information about the algorithms.
+
+2013-10-01 Werner Koch <wk@gnupg.org>
+
+ cipher: Simplify the cipher dispatcher cipher.c.
+ + commit 3ca180b25e8df252fc16f802cfdc27496e307830
+ * src/gcrypt-module.h (gcry_cipher_spec_t): Move to ...
+ * src/cipher-proto.h (gcry_cipher_spec_t): here. Merge with
+ cipher_extra_spec_t. Add fields ALGO and FLAGS. Set these fields in
+ all cipher modules.
+ * cipher/cipher.c: Change most code to replace the former module
+ system by a simpler system to gain information about the algorithms.
+ (disable_pubkey_algo): Simplified. Not anymore thread-safe, though.
+
+ * cipher/md.c (_gcry_md_selftest): Use correct structure. Not a real
+ problem because both define the same function as their first field.
+
+ * cipher/pubkey.c (_gcry_pk_selftest): Take care of the disabled flag.
+
+ mpi: Fix gcry_mpi_neg.
+ + commit 4153fa859816e799e506055321a22e6450aacdcc
+ * mpi/mpiutil.c (_gcry_mpi_neg): Copy U to W.
+
+2013-10-01 Peter Wu <lekensteyn@gmail.com>
+
+ cipher: Add support for 128-bit keys in RC2.
+ + commit 738177ec0eae05069ec61bc4f724a69d4e052e42
+ * cipher/rfc2268.c (oids_rfc2268_128): New
+ (_gcry_cipher_spec_rfc2268_128): New.
+ * cipher/cipher.c (cipher_table_entry): Add GCRY_CIPHER_RFC2268_128.
+
+2013-09-30 Werner Koch <wk@gnupg.org>
+
+ ecc: Use faster b parameter for Ed25519.
+ + commit 1d85452412b65e7976bc94969fc513ff6b880ed8
+ * cipher/ecc-curves.c (domain_parms): Replace b.
+ * tests/t-mpi-point.c (test_curve): Ditto.
+
+ ecc: Prepare for future Ed25519 optimization.
+ + commit a2618c822e666d4121cba29bee3fd50bf70c9743
+ * mpi/ec-ed25519.c: New but empty file.
+ * mpi/ec-internal.h: New.
+ * mpi/ec.c: Include ec-internal.h.
+ (ec_mod): New.
+ (ec_addm): Use ec_mod.
+ (ec_mulm): Remove commented code. Use ec_mod.
+ (ec_subm): Call simple sub.
+ (ec_pow2): Use ec_mulm.
+ (ec_mul2): New.
+ (dup_point_weierstrass): Use ec_mul2.
+ (dup_point_twistededwards): Add special case for a == -1. Use
+ ec_mul2.
+ (add_points_weierstrass): Use ec_mul2.
+ (add_points_twistededwards): Add special case for a == -1.
+ (_gcry_mpi_ec_curve_point): Ditto.
+ (ec_p_init): Add hack to test Barrett functions.
+ * src/ec-context.h (mpi_ec_ctx_s): Add P_BARRETT.
+
+ * mpi/mpi-mod.c (_gcry_mpi_mod_barrett): Fix sign problem.
+
+ ecc: Fix recomputing of Q for Ed25519.
+ + commit c325adb8f5092b80a626bd3bb5e49cf7f3a29fc8
+ * cipher/ecc-misc.c (reverse_buffer): New.
+ (_gcry_ecc_compute_public): Add ED255519 specific code.
+ * cipher/ecc.c (sign_eddsa): Allocate DIGEST in secure memory. Get
+ rid of HASH_D.
+ * tests/t-mpi-point.c (context_param): Test recomputing of Q for
+ Ed25519.
+
+ log: Try to print s-expressions in a more compact format.
+ + commit d69a13d3d1c14ad6a6aa7cd349d6d2dfb152d422
+ * src/misc.c (count_closing_parens): New.
+ (_gcry_log_printsxp): Use new function.
+ * mpi/ec.c (_gcry_mpi_point_log): Take care of a NULL point.
+
+2013-09-30 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Make Whirlpool use the _gcry_md_block_write helper.
+ + commit 68cefd0f1d60ac33b58031df9b1d165cb1bf0f14
+ * cipher/whirlpool.c (whirlpool_context_t): Add 'bctx', remove
+ 'buffer', 'count' and 'nblocks'.
+ (whirlpool_init): Initialize 'bctx'.
+ (whirlpool_transform): Adjust context argument type and burn stack
+ depth.
+ (whirlpool_add): Remove.
+ (whirlpool_write): Use _gcry_md_block_write.
+ (whirlpool_final, whirlpool_read): Adjust for 'bctx' usage.
+
+ whirlpool: add stack burning after transform.
+ + commit a96d622e1a36d40d1504b7ada567e90ec9957443
+ * cipher/whirlpool.c (whirlpool_transform): Return burn stack depth.
+ (whirlpool_add): Do burn_stack.
+
+ whirlpool: do bitcount calculation in finalization part.
+ + commit 10d7351411f19bb2c03d2e24ca5a38dabe45023b
+ * cipher/whirlpool.c (whirlpool_context_t): Remove 'length', add
+ 'nblocks'.
+ (whirlpool_add): Update 'nblocks' instead of 'length', and add early
+ return at one spot.
+ (whirlpool_write): Check for 'nblocks' overflow.
+ (whirlpool_final): Convert 'nblocks' to bit-counter, and use
+ whirlpool_write instead of whirlpool_add.
+
+2013-09-30 Werner Koch <wk@gnupg.org>
+
+ Add logging functions to the API.
+ + commit d2076f27bb7c5d505abf25fc622d21794c4a5df3
+ * src/gcrypt.h.in (_GCRY_GCC_ATTR_PRINTF): New.
+ (gcry_log_debug, gcry_log_debughex, gcry_log_debugmpi): New.
+ (gcry_log_debugpnt, gcry_log_debugsxp): New.
+ * src/visibility.c (gcry_log_debug): New.
+ (gcry_log_debughex, gcry_log_debugmpi, gcry_log_debugpnt): New.
+ (gcry_log_debugsxp): New.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add new functions.
+ * src/misc.c (_gcry_logv): Make public.
+ (_gcry_log_printsxp): New.
+ * src/g10lib.h (log_printsxp): New macro.
+
+2013-09-26 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Make libgcrypt build with Clang on i386.
+ + commit db60d828137c4f3682ca4ca2a54fe3d96d3db5f9
+ * cipher/longlong.h [__i386__] (add_ssaaaa, sub_ddmmss)
+ (umul_ppmm, udiv_qrnnd): Do not cast asm output to USItype.
+
+2013-09-25 Werner Koch <wk@gnupg.org>
+
+ mpi: Change not yet used _gcry_mpi_set_opaque_copy.
+ + commit 1c6660debdbf1e4c3e80074c846a3e3097f214bb
+ * mpi/mpiutil.c (_gcry_mpi_set_opaque_copy): Change prototype.
+ (_gcry_mpi_get_opaque_copy): Take care of gcry_malloc failure.
+
+ sexp: Improve printing of data with a leading zero.
+ + commit 9b7c49971588edf6acfc74bfb797eb79d19cb350
+ * src/sexp.c (suitable_encoding): Detect leading zero byte.
+
+ ecc: Allow the name "q@eddsa" to get/set the public key.
+ + commit d6683d2a6065986a9198d2d2eaa02c005b68cea4
+ * cipher/ecc-curves.c (_gcry_ecc_get_mpi): Support "q@eddsa".
+ (_gcry_ecc_set_mpi): Support "q".
+ * cipher/ecc.c (eddsa_encodepoint): Rename to ...
+ (_gcry_ecc_eddsa_encodepoint): this and make global. Remove arg
+ MINLEN and take from context.
+ (eddsa_decodepoint): Rename to
+ (_gcry_ecc_eddsa_decodepoint): this and make global. Remove arg LEN
+ and take from context.
+ (sign_eddsa, verify_eddsa): Take B from context.
+ (ecc_sign, ecc_verify): Add hack to set DIALECT.
+ (_gcry_pk_ecc_get_sexp): Use _gcry_ecc_compute_public. Handle EdDSA.
+ * src/ec-context.h (mpi_ec_ctx_s): Add field NBITS.
+ * mpi/ec.c (ec_p_init): Init NBITS.
+ * tests/t-mpi-point.c (test_curve): Add Ed25519.
+ (sample_ed25519_q): New.
+ (context_param): Check new sample key.
+ (hex2buffer, hex2mpiopa): New.
+ (cmp_mpihex): Take care of opaque MPIs.
+
+ mpicalc: Add statement to compute the number of bits.
+ + commit 9a4447ccd1b90bcd701941e80a7f484a1825fcea
+ * src/mpicalc.c (do_nbits): New.
+ (main): Add statement 'b'.
+
+ ecc: Refactor low-level access functions.
+ + commit 64a7d347847d606eb5f4c156e24ba060271b8f6b
+ * mpi/ec.c (point_copy): Move to cipher/ecc-curves.c.
+ (ec_get_reset): Rename to _gcry_mpi_ec_get_reset and make global.
+ (_gcry_mpi_ec_get_mpi): Factor most code out to _gcry_ecc_get_mpi.
+ (_gcry_mpi_ec_get_point): Factor most code out to _gcry_ecc_get_point.
+ (_gcry_mpi_ec_set_mpi): Factor most code out to _gcry_ecc_set_mpi.
+ (_gcry_mpi_ec_set_point): Factor most code out to _gcry_ecc_set_point.
+ * cipher/ecc-curves.c (_gcry_ecc_get_mpi): New.
+ (_gcry_ecc_get_point, _gcry_ecc_set_mpi, _gcry_ecc_set_point): New.
+ * cipher/ecc-misc.c (_gcry_ecc_compute_public): New.
+
+ ecc: Fix highly unlikely endless loop in sign_ecdsa.
+ + commit 1f5f4452e5bca105ec2197a4facbf9778e7dc31e
+ * cipher/ecc.c (sign_ecdsa): Turn while-do into do-while loops.
+
+2013-09-24 Werner Koch <wk@gnupg.org>
+
+ ecc: Allow the use of an uncompressed public key.
+ + commit df013c9820709421ef9550158ac5df0060d73379
+ * cipher/ecc.c (eddsa_encodepoint): Factor most code out to ...
+ (eddsa_encode_x_y): new fucntion.
+ (eddsa_decodepoint): Allow use of an uncompressed public key.
+ * tests/t-ed25519.c (N_TESTS): Adjust.
+ * tests/t-ed25519.inp: Add test 1025.
+
+2013-09-23 Werner Koch <wk@gnupg.org>
+
+ pk: Add algo id GCRY_PK_ECC and deprecate ECDSA and ECDH.
+ + commit d5f91466695c5736f441c9bf1998436184a4bf61
+ * src/gcrypt.h.in (GCRY_PK_ECC): New.
+ * cipher/pubkey.c (map_algo): New.
+ (spec_from_algo, gcry_pk_get_param, _gcry_pk_selftest): Use it.
+ * cipher/ecc.c (selftests_ecdsa): Report using GCRY_PK_ECC.
+ (run_selftests): Simplify.
+ (ecdh_names, ecdsa_names): Merge into a new ecc_names.
+ (_gcry_pubkey_spec_ecdh, _gcry_pubkey_spec_ecdsa): Merge into new
+ _gcry_pubkey_spec_ecc.
+
+ ec: Use mpi_mulm instead of mpi_powm.
+ + commit 4552437bb3c5ff96a889fd31e4bc504b2a12fac7
+ * mpi/ec.c (ec_pow2): New.
+ (ec_powm): Remove call to mpi_abs.
+ (dup_point_weierstrass, dup_point_twistededwards)
+ (add_points_weierstrass, add_points_twistededwards)
+ (_gcry_mpi_ec_curve_point): Use ec_pow2.
+
+2013-09-21 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ bufhelp: enable fast unaligned memory accesses on powerpc.
+ + commit 925d4fb3e8f2df3c5566ec6b5df7620a3d3504e5
+ * cipher/bufhelp.h [__powerpc__] (BUFHELP_FAST_UNALIGNED_ACCESS): Set
+ macro enabled.
+ [__powerpc64__] (BUFHELP_FAST_UNALIGNED_ACCESS): Ditto.
+
+ Remove i386 inline assembly version of rotation functions.
+ + commit cfea5c28a3822e1e7e401e5107ebe07ba7fdcf37
+ * cipher/bithelp.h (rol, ror): Remove i386 version, change
+ macros to inline functions.
+ * src/hmac256.c (ror): Ditto.
+
+ Optimize and cleanup 32-bit and 64-bit endianess transforms.
+ + commit 9337e03824a5bdd3bbbcb8382cabefe6d6c32e1e
+ * cipher/bithelp.h (bswap32, bswap64, le_bswap32, be_bswap32)
+ (le_bswap64, be_bswap64): New.
+ * cipher/bufhelp.h (buf_get_be32, buf_get_le32, buf_put_le32)
+ (buf_put_be32, buf_get_be64, buf_get_le64, buf_put_be64)
+ (buf_put_le64): New.
+ * cipher/blowfish.c (do_encrypt_block, do_decrypt_block): Use new
+ endian conversion helpers.
+ (do_bf_setkey): Turn endian specific code to generic.
+ * cipher/camellia.c (GETU32, PUTU32): Use new endian conversion
+ helpers.
+ * cipher/cast5.c (rol): Remove, use rol from bithelp.
+ (F1, F2, F3): Fix to use rol from bithelp.
+ (do_encrypt_block, do_decrypt_block, do_cast_setkey): Use new endian
+ conversion helpers.
+ * cipher/des.c (READ_64BIT_DATA, WRITE_64BIT_DATA): Ditto.
+ * cipher/md4.c (transform, md4_final): Ditto.
+ * cipher/md5.c (transform, md5_final): Ditto.
+ * cipher/rmd160.c (transform, rmd160_final): Ditto.
+ * cipher/salsa20.c (LE_SWAP32, LE_READ_UINT32): Ditto.
+ * cipher/scrypt.c (READ_UINT64, LE_READ_UINT64, LE_SWAP32): Ditto.
+ * cipher/seed.c (GETU32, PUTU32): Ditto.
+ * cipher/serpent.c (byte_swap_32): Remove.
+ (serpent_key_prepare, serpent_encrypt_internal)
+ (serpent_decrypt_internal): Use new endian conversion helpers.
+ * cipher/sha1.c (transform, sha1_final): Ditto.
+ * cipher/sha256.c (transform, sha256_final): Ditto.
+ * cipher/sha512.c (__transform, sha512_final): Ditto.
+ * cipher/stribog.c (transform, stribog_final): Ditto.
+ * cipher/tiger.c (transform, tiger_final): Ditto.
+ * cipher/twofish.c (INPACK, OUTUNPACK): Ditto.
+ * cipher/whirlpool.c (buffer_to_block, block_to_buffer): Ditto.
+ * configure.ac (gcry_cv_have_builtin_bswap32): Check for compiler
+ provided __builtin_bswap32.
+ (gcry_cv_have_builtin_bswap64): Check for compiler provided
+ __builtin_bswap64.
+
+ gostr3411_94: set better burn stack depth estimate.
+ + commit 7409de7bc28ff8847c9d71d8c3e35e1968d59d60
+ * cipher/gost28147.c (_gcry_gost_enc_one): Account function stack to
+ burn stack depth.
+ * cipher/gostr3411-94.c (max): New macro.
+ (do_hash_step, transform): Return stack burn depth.
+
+ Use hash transform function return type for passing burn stack depth.
+ + commit 592c2ab3deeeccbb6d3b078ed7bf0e6627c8e1fb
+ * cipher/gostr4311-94.c (transform): Return stack burn depth.
+ * cipher/hash-common.c (_gcry_md_block_write): Use stack burn depth
+ returned by 'hd->bwrite'.
+ * cipher/hash-common.h (_gcry_md_block_write_t): Change return type to
+ 'unsigned int'.
+ (gry_md_block_ctx_t): Remove 'stack_burn'.
+ * cipher/md4.c (transform): Return stack burn depth.
+ (md4_final): Use stack burn depth from transform.
+ * cipher/md5.c (transform): Return stack burn depth.
+ (md5_final): Use stack burn depth from transform.
+ * cipher/rmd160.c (transform): Return stack burn depth.
+ (rmd160_final): Use stack burn depth from transform.
+ * cipher/sha1.c (transform): Return stack burn depth.
+ (sha1_final): Use stack burn depth from transform.
+ * cipher/sha256.c (transform): Return stack burn depth.
+ (sha256_final): Use stack burn depth from transform.
+ * cipher/sha512.c (__transform, transform): Return stack burn depth.
+ (sha512_final): Use stack burn depth from transform.
+ * cipher/stribog.c (transform64): Return stack burn depth.
+ * cipher/tiger.c (transform): Return stack burn depth.
+ (tiger_final): Use stack burn depth from transform.
+
+ Make STRIBOG use the new _gcry_md_block_write helper.
+ + commit 902ea6052c11108bd19333c31b03e084bed1fb86
+ * cipher/stribog.c (STRIBOG_STRUCT): Add 'bctx' and remove 'buf' and
+ 'count'.
+ (stribog_init_512): Initialize 'bctx'.
+ (transform64): New function.
+ (stribog_write): Remove.
+ (stribog_final): Use _gcry_md_block_write and bctx.
+ (_gcry_digest_spec_stribog_256, _gcry_digest_spec_stribog_512): Use
+ _gcry_md_block_write.
+
+ Make SHA-512 use the new _gcry_md_block_write helper.
+ + commit cce7449efe471b076c5a97929ac8907162011394
+ * cipher/hash-common.c (_gcry_md_block_write): Check that hd->buf is
+ large enough.
+ * cipher/hash-common.h (MD_BLOCK_MAX_BLOCKSIZE, MD_NBLOCKS_TYPE): New
+ macros.
+ (gcry_md_block_ctx_t): Use above macros for 'nblocks' and 'buf'.
+ * cipher/sha512.c (SHA512_STATE): New struct.
+ (SHA512_CONTEXT): Add 'bctx' and 'state'.
+ (sha512_init, sha384_init): Initialize 'bctx'.
+ (__transform, _gcry_sha512_transform_armv7_neon): Use SHA512_STATE for
+ 'hd'.
+ (transform): For now, do not return burn stack.
+ (sha512_write): Remove.
+ (sha512_final): Use _gcry_md_block_write and bctx.
+ (_gcry_digest_spec_sha512, _gcry_digest_spec_sha384): Use
+ _gcry_md_block_write.
+
+2013-09-20 Werner Koch <wk@gnupg.org>
+
+ sexp: Change internal versions to always use gpg_err_code_t.
+ + commit 3e5cfa20acfeccb9df2c3fae2730344b40b36104
+ * src/sexp.c (gcry_sexp_new, gcry_sexp_create, gcry_sexp_build)
+ (gcry_sexp_build_array, gcry_sexp_canon_len): Change error return type
+ from gpg_error_t to gpg_err_code_t. Remove all calls to gpg_error.
+ * src/visibility.c (gcry_sexp_new, gcry_sexp_create, gcry_sexp_sscan)
+ (gcry_sexp_build, gcry_sexp_build_array, gcry_sexp_canon_len): Map
+ error codes via gpg_error.
+ * cipher/dsa.c, cipher/ecc.c, cipher/elgamal.c, cipher/rsa.c: Remove
+ use gpg_err_code wrappers.
+
+ pk: Move s-exp creation for gcry_pk_decrypt to the modules.
+ + commit 722bfc1e5f2268453db62f38cc46b5ec6ef3adee
+ * cipher/pubkey.c (sexp_to_enc): Remove RET_MODERN arg and merge it
+ into FLAGS.
+ (gcry_pk_decrypt): Move result s-exp building into the modules.
+ * src/cipher-proto.h (gcry_pk_decrypt_t): Add some args.
+ * cipher/ecc.c (ecc_decrypt_raw): Change to return an s-exp.
+ * cipher/elgamal.c (elg_decrypt): Ditto.
+ * cipher/rsa.c (rsa_decrypt): Ditto.
+ (rsa_blind, rsa_unblind): Merge into rsa_decrypt. This saves several
+ extra MPI allocations.
+
+ pk: Remove unused function.
+ + commit 64cd7ab93da7c95cc8aa320c61c6e29f9e2399c4
+ * cipher/pubkey.c (_gcry_pk_aliased_algo_name): Remove
+
+2013-09-19 Werner Koch <wk@gnupg.org>
+
+ Beautify debug output of the prime generator.
+ + commit 6576f0a7684292cb5691bfcabad0acca4c06c014
+ * cipher/primegen.c: Adjust output of log_mpidump to recently changed
+ log_mpidump code changes.
+
+ pk: Move s-expr creation for genkey to the modules.
+ + commit 1bf08850bf9343146c938bc03917417e16393e9a
+ * cipher/pubkey.c (pubkey_generate): Fold into gcry_pk_genkey
+ (gcry_pk_genkey): Move result s-exp creation into the modules.
+ * cipher/dsa.c (dsa_generate): Create result as s-exp.
+ * cipher/elgamal.c (elg_generate): Ditto.
+ * cipher/rsa.c (rsa_generate): Ditto.
+ * cipher/ecc.c (ecc_generate): Ditto.
+ * src/cipher-proto.h (pk_ext_generate_t): Remove type
+ (gcry_pk_spec): and remove from struct.
+
+ tests: Beautify some diagnostics.
+ + commit 2fe084873333c4d67bcfba0b527d63cd3cff6c47
+ * tests/benchmark.c (ecc_bench): Print the key sexp in very verbose
+ mode.
+ (main): Add option --pk-count.
+ * tests/keygen.c: Add Elgamal generation and improved diagnostics.
+ * tests/t-ed25519.c (check_ed25519): Print running number of tests
+ done.
+
+ sexp: Improve printing data representing a negative number.
+ + commit b3f3d47d347c14ed41d755cee580f000309b9c03
+ * src/sexp.c (suitable_encoding): Detect a negative number.
+
+ pk: Move RSA encoding functions to a new file.
+ + commit 071f70b9a766187fc70f6abc6a69d50752449285
+ * cipher/rsa-common: New.
+ * cipher/pubkey.c (pkcs1_encode_for_encryption): Move to rsa-common.c
+ and rename to _gcry_rsa_pkcs1_encode_for_enc.
+ (pkcs1_decode_for_encryption): Move to rsa-common.c and rename to
+ _gcry_rsa_pkcs1_decode_for_enc.
+ (pkcs1_encode_for_signature): Move to rsa-common.c and rename to
+ _gcry_rsa_pkcs1_encode_for_sig.
+ (oaep_encode): Move to rsa-common.c and rename to
+ _gcry_rsa_oaep_encode.
+ (oaep_decode): Move to rsa-common.c and rename to
+ _gcry_rsa_oaep_decode.
+ (pss_encode): Move to rsa-common.c and rename to _gcry_rsa_pss_encode.
+ (pss_verify): Move to rsa-common.c and rename to _gcry_rsa_pss_decode.
+ (octet_string_from_mpi, mgf1): Move to rsa-common.c.
+
+ pk: Move s-expr creation for sign and encrypt to the modules.
+ + commit eca9e2e50ddd4c9020fe1d4a9a3c77d20ebb90f6
+ * cipher/pubkey.c (pubkey_encrypt): Fold into gcry_pk_encrypt.
+ (pubkey_decrypt): Fold into gcry_pk_decrypt.
+ (pubkey_sign): Fold into gcry_pk_sign.
+ (pubkey_verify): Fold into gcry_pk_verify.
+ (octet_string_from_mpi): Make it a wrapper and factor code out to ...
+ * mpi/mpicoder.c (_gcry_mpi_to_octet_string): New function.
+
+ * src/cipher.h (PUBKEY_FLAG_FIXEDLEN): New.
+ * cipher/pubkey.c (sexp_data_to_mpi): Set flag for some encodings.
+ (gcry_pk_encrypt): Simply by moving the s-expr generation to the modules.
+ (gcry_pk_sign): Ditto.
+ * cipher/dsa.c (dsa_sign): Create s-expr.
+ * cipher/elgamal.c (elg_encrypt, elg_sign): Ditto.
+ * cipher/rsa.c (rsa_encrypt, rsa_sign): Ditto.
+ * cipher/ecc.c (ecc_sign, ecc_encrypt_raw): Ditto.
+ (ecdsa_names): Add "eddsa".
+ * tests/t-ed25519.c (one_test): Expect "eddsa" token.
+
+2013-09-19 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Fix Stribog digest on bigendian platforms.
+ + commit d399faf5db71d429bfd6fa4a9cfc82e2a55055f0
+ * cipher/stribog.c (stribog_final): swap bytes in the result of digest
+ calculations.
+
+2013-09-18 Werner Koch <wk@gnupg.org>
+
+ pk: Simplify the public key dispatcher pubkey.c.
+ + commit 85722afb379f7a392a8117b895de273fd88c4ebc
+ * src/cipher-proto.h (gcry_pk_spec_t): Add fields ALGO and FLAGS.
+ * cipher/dsa.c (_gcry_pubkey_spec_dsa): Set these fields.
+ * cipher/ecc.c (_gcry_pubkey_spec_ecdsa): Ditto.
+ (_gcry_pubkey_spec_ecdh): Ditto.
+ * cipher/rsa.c (_gcry_pubkey_spec_rsa): Ditto.
+ * cipher/elgamal.c (_gcry_pubkey_spec_elg): Ditto
+ (_gcry_pubkey_spec_elg_e): New.
+ * cipher/pubkey.c: Change most code to replace the former module
+ system by a simpler system to gain information about the algorithms.
+ (disable_pubkey_algo): SImplified. Not anymore thread-safe, though.
+
+ pk: Merge extraspecs struct with standard specs struct.
+ + commit 89103ce00e862cc709e80fa41f2ee13d54093ec5
+ * src/gcrypt-module.h (gcry_pk_spec_t): Move this typedef and the
+ corresponding function typedefs to ...
+ * src/cipher-proto.h: here.
+ (pk_extra_spec_t): Remove typedef and merge fields into
+ gcry_pk_spec_t.
+ * cipher/rsa.c, cipher/dsa.c, cipher/elg.c, cipher/ecc.c: Ditto.
+ * cipher/pubkey.c: Change accordingly.
+ * src/cipher.h (_gcry_pubkey_extraspec_rsa): Remove.
+ (_gcry_pubkey_extraspec_dsa): Remove.
+ (_gcry_pubkey_extraspec_elg): Remove.
+ (_gcry_pubkey_extraspec_ecdsa): Remove.
+
+2013-09-18 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix encryption/decryption return type for GOST28147.
+ + commit 2ad7ea9cb388fd31e4b0852b68d77f599ef4adce
+ * cipher/gost.h (_gcry_gost_enc_one): Change return type to
+ 'unsigned int'.
+ * cipher/gost28147.c (max): New macro.
+ (gost_encrypt_block, gost_decrypt_block): Return burn stack depth.
+ (_gcry_gost_enc_one): Return burn stack depth from gost_encrypt_block.
+
+2013-09-18 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ doc: fix building of ps and pdf documentation.
+ + commit bd33fa21c9afc6c81e0da24016fc13001e9c7390
+ * doc/gcrypt.texi, doc/gpl.texi, doc/lgpl.texi: fix texinfo errors.
+
+ Add GOST R 34.11-2012 implementation (Stribog)
+ + commit c22064bdd773a807801e300aa9214b2fdcafcf20
+ * src/gcrypt.h.in (GCRY_MD_GOSTR3411_12_256)
+ (GCRY_MD_GOSTR3411_12_512): New.
+ * cipher/stribog.c: New.
+ * configure.ac (available_digests_64): Add stribog.
+ * src/cipher.h: Declare Stribog declarations.
+ * cipher/md.c: Register Stribog digest.
+ * tests/basic.c (check_digests) Add 4 testcases for Stribog from
+ standard.
+ * doc/gcrypt.texi: Document new constants.
+
+ Add basic implementation of GOST R 34.11-94 message digest.
+ + commit b0579baaa04fb91eabbbdc295bcabea04cf84056
+ * src/gcrypt.h.in (GCRY_MD_GOSTR3411_94): New.
+ * cipher/gostr3411-94.c: New.
+ * configure.ac (available_digests): Add gostr3411-94.
+ * src/cipher.h: Add gostr3411-94 definitions.
+ * cipher/md.c: Register GOST R 34.11-94.
+ * tests/basic.c (check_digests): Add 4 tests for GOST R 34.11-94
+ hash algo. Two are defined in the standard itself, two other are
+ more or less common tests - an empty string an exclamation mark.
+ * doc/gcrypt.texi: Add an entry describing GOST R 34.11-94 to the MD
+ algorithms table.
+
+ Separate common md block code.
+ + commit ecde77ad98690540abb21db08e5531297ed72bd0
+ * cipher/hash-common.c (_gcry_md_block_write): New function to handle
+ block md operations. The current implementation is limited to 64 byte
+ buffer and u32 block counter.
+
+ * cipher/md4.c, cipher/md5.c, cipher/rmd.h, cipher/rmd160.c
+ *cipher/sha1.c, cipher/sha256.c, cipher/tiger.c: Convert to use
+ _gcry_md_block_write.
+
+ Add limited implementation of GOST 28147-89 cipher.
+ + commit 56b5949f71f501744998f5ebc12488ebf6f1c0b5
+ * src/gcrypt.h.in (GCRY_CIPHER_GOST28147): New.
+ * cipher/gost.h, cipher/gost28147.c: New.
+ * configure.ac (available_ciphers): Add gost28147.
+ * src/cipher.h: Add gost28147 definitions.
+ * cipher/cipher.c: Register gost28147.
+ * tests/basic.c (check_ciphers): Enable simple test for gost28147.
+ * doc/gcrypt.texi: document GCRY_CIPHER_GOST28147.
+
+2013-09-18 Werner Koch <wk@gnupg.org>
+
+ ecc: Add Ed25519 key generation and prepare for optimizations.
+ + commit 63cd3474425cb5a7ec4d1a56be15b248ecda4680
+ * src/mpi.h (enum ecc_dialects): New.
+ * src/ec-context.h (mpi_ec_ctx_s): Add field DIALECT.
+ * cipher/ecc-common.h (elliptic_curve_t): Ditto.
+ * cipher/ecc-curves.c (ecc_domain_parms_t): Ditto.
+ (domain_parms): Add dialect values.
+ (_gcry_ecc_fill_in_curve): Set dialect.
+ (_gcry_ecc_get_curve): Ditto.
+ (_gcry_mpi_ec_new): Ditto.
+ (_gcry_ecc_get_param): Use ECC_DIALECT_STANDARD for now.
+ * cipher/ecc-misc.c (_gcry_ecc_curve_copy): Copy dialect.
+ (_gcry_ecc_dialect2str): New.
+ * mpi/ec.c (ec_p_init): Add arg DIALECT.
+ (_gcry_mpi_ec_p_internal_new): Ditto.
+ (_gcry_mpi_ec_p_new): Ditto.
+
+ * mpi/mpiutil.c (gcry_mpi_set_opaque): Set the secure flag.
+ (_gcry_mpi_set_opaque_copy): New.
+
+ * cipher/ecc-misc.c (_gcry_ecc_os2ec): Take care of an opaque MPI.
+ * cipher/ecc.c (eddsa_generate_key): New.
+ (generate_key): Rename to nist_generate_key and factor some code out
+ to ...
+ (ecc_generate_ext): here. Divert to eddsa_generate_key if desired.
+ (eddsa_decodepoint): Take care of an opaque MPI.
+ (ecc_check_secret_key): Ditto.
+ (ecc_sign): Ditto.
+ * cipher/pubkey.c (sexp_elements_extract_ecc): Store public and secret
+ key as opaque MPIs.
+ (gcry_pk_genkey): Add the curve_name also to the private key part of
+ the result.
+
+ * tests/benchmark.c (ecc_bench): Support Ed25519.
+ (main): Add option --debug.
+ * tests/curves.c (sample_key_2): Make sure that P and N are positive.
+ * tests/keygen.c (show): New.
+ (check_ecc_keys): Support Ed25519.
+
+2013-09-17 Werner Koch <wk@gnupg.org>
+
+ mpi: Support printing of negative numbers.
+ + commit 89fe2173649a72019d75e059e6c6938efd10421f
+ * mpi/mpicoder.c (twocompl, onecompl): New.
+ (gcry_mpi_print): Use it for STD and SSH.
+ (gcry_mpi_scan): Use it for STD and SSH. Always set NSCANNED.
+ (gcry_mpi_aprint): Clear the extra allocated byte.
+ * tests/t-convert.c (showhex, showmpi): New.
+ (mpi2bitstr_nlz): New.
+ (check_formats): New.
+ (main): Call new test.
+
+2013-09-16 Werner Koch <wk@gnupg.org>
+
+ Fix bug in _gcry_mpi_tdiv_q_2exp.
+ + commit a7a9cdcaaf3979baa18dad51e722882581349f45
+ * mpi/mpi-internal.h (MPN_COPY_INCR): Make it work.
+
+ ecc: Implement Curve Ed25519 signing and verification.
+ + commit bc5199a02abe428ad377443280b3eda60141a1d6
+ * cipher/ecc-curves.c (domain_parms): Add curve "Ed25519".
+ * cipher/ecc.c (reverse_buffer): New.
+ (eddsa_encodempi): New.
+ (eddsa_encodepoint): New.
+ (eddsa_decodepoint): New.
+ (sign_eddsa): Implement.
+ (verify_eddsa): Implement.
+ (ecc_sign): Init unused Q. Pass public key to sign_eddsa.
+ (ecc_verify): Init pk.Q if not used. Pass public key verbatim to
+ verify_eddsa.
+ * cipher/pubkey.c (sexp_elements_extract): Add arg OPAQUE. Change all
+ callers to pass 0.
+ (sexp_to_sig): Add arg OPAQUE and pass it to sexp_elements_extract.
+ (sexp_data_to_mpi): Allow for a zero length "value".
+ (gcry_pk_verify): Reorder parameter processing. Pass OPAQUE flag as
+ required.
+ * mpi/ec.c (ec_invm): Print a warning if the inverse does not exist.
+ (_gcry_mpi_ec_get_affine): Implement for our Twisted Edwards curve
+ model.
+ (dup_point_twistededwards): Implement.
+ (add_points_twistededwards): Implement.
+ (_gcry_mpi_ec_mul_point): Support Twisted Edwards.
+
+ * mpi/mpicoder.c (do_get_buffer): Add arg FILL_LE.
+ (_gcry_mpi_get_buffer): Ditto. Change all callers.
+ (_gcry_mpi_get_secure_buffer): Ditto.
+
+ * src/sexp.c (_gcry_sexp_nth_opaque_mpi): New.
+
+ * tests/t-ed25519.c: New.
+ * tests/t-ed25519.inp: New.
+ * tests/t-mpi-point.c (basic_ec_math_simplified): Print some output
+ only in debug mode.
+ (twistededwards_math): New test.
+ (main): Call new test.
+
+ mpi: Add internal convenience function.
+ + commit 44a2c34e90ed7de149952398787906d8823b636b
+ * mpi/mpiutil.c (_gcry_mpi_get_opaque_copy): New.
+
+ mpi: Add debug function to print a point.
+ + commit 8ebc94d11a1eb93f2365c93f555e958700fdfbd4
+ * mpi/ec.c (_gcry_mpi_point_log): New.
+ * src/mpi.h (log_printpnt): new macro.
+
+ tests: Factor time measurement code out.
+ + commit 58eaf0c4332ac2f645ede28c4d18337389dfa753
+ * tests/benchmark.c (started_at, stopped_at, start_timer, stop_timer)
+ (elapsed time): Factor out to ..
+ * tests/stopwatch.h: new file.
+
+2013-09-12 Werner Koch <wk@gnupg.org>
+
+ Fix _gcry_log_printmpi to print 00 instead of a sole sign.
+ + commit 1c76349c69c70a62b516a4f837c6287def640807
+ * src/misc.c: Special case an mpi length of 0.
+
+2013-09-11 Werner Koch <wk@gnupg.org>
+
+ Streamline the use of the internal mpi and hex debug functions.
+ + commit e35ed615acc624a8b6c07576ea0650aac2bdb0db
+ * mpi/mpicoder.c (gcry_mpi_dump): Remove.
+ (_gcry_log_mpidump): Remove.
+ * src/misc.c (_gcry_log_printhex): Factor all code out to ...
+ (do_printhex): new. Add line wrapping a and compact printing.
+ (_gcry_log_printmpi): New.
+ * src/mpi.h (log_mpidump): Remove macro.
+ * src/g10lib.h (log_mpidump): Add compatibility macro.
+ (log_printmpi): New macro
+ * src/visibility.c (gcry_mpi_dump): Call _gcry_log_printmpi.
+ * cipher/primegen.c (prime_generate_internal): Replace gcry_mpi_dump
+ by log_printmpi.
+ (gcry_prime_group_generator): Ditto.
+ * cipher/pubkey.c: Remove extra colons from log_mpidump call.
+ * cipher/rsa.c (stronger_key_check): Use log_printmpi.
+
+2013-09-10 Werner Koch <wk@gnupg.org>
+
+ md: Add function gcry_md_hash_buffers.
+ + commit f3bca0c77c4979504f95fdbc618f7458e61e3e45
+ * src/gcrypt.h.in (gcry_buffer_t): new.
+ (gcry_md_hash_buffers): New.
+ * src/visibility.c, src/visibility.h: Add wrapper for new function.
+ * src/libgcrypt.def, src/libgcrypt.vers: Export new function.
+ * cipher/md.c (gcry_md_hash_buffers): New.
+ * cipher/sha1.c (_gcry_sha1_hash_buffers): New.
+ * tests/basic.c (check_one_md_multi): New.
+ (check_digests): Run that test.
+ * tests/hmac.c (check_hmac_multi): New.
+ (main): Run that test.
+
+ md: Fix Whirlpool flaw.
+ + commit 0a28b2d2c9181a536fc894e24626714832619923
+ * cipher/whirlpool.c (whirlpool_add): Remove shortcut return so that
+ byte counter is always properly updated.
+
+2013-09-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix static build on AMD64.
+ + commit 90fdf25f0dcc5feac7195ede55bd15948a11363e
+ * cipher/rijndael-amd64.S: Correct 'RIP' macro for non-PIC build.
+
+ scrypt: fix for big-endian systems.
+ + commit 38a038a135d82231eff9d84f1ae3c4a25c6a5e75
+ * cipher/scrypt.c (_salsa20_core): Fix endianess issues.
+
+2013-09-07 Werner Koch <wk@gnupg.org>
+
+ Use gcc "unused" attribute only with gcc >= 3.5.
+ + commit f7135e299e659d78906aac3dfdf30f380b5cf9c6
+ * src/g10lib.h (GCC_ATTR_UNUSED): Fix gcc version detection.
+
+2013-09-07 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Add support for Salsa20/12 - 12 round version of Salsa20.
+ + commit ae6f6c47d2e0c536f3eab0823b5f23d26956cda2
+ * src/gcrypt.h.in (GCRY_CIPHER_SALSA20R12): New.
+ * src/salsa20.c (salsa20_core, salsa20_do_encrypt_stream): Add support
+ for reduced round versions.
+ (salsa20r12_encrypt_stream, _gcry_cipher_spec_salsa20r12): Implement
+ Salsa20/12 - a 12 round version of Salsa20 selected by eStream.
+ * src/cipher.h: Declsare Salsa20/12 definition.
+ * cipher/cipher.c: Register Salsa20/12
+ * tests/basic.c: (check_stream_cipher, check_stream_cipher_large_block):
+ Populate Salsa20/12 tests with test vectors from ecrypt
+ (check_ciphers): Add simple test for Salsa20/12
+
+2013-09-07 Werner Koch <wk@gnupg.org>
+
+ Add configure option --disable-amd64-as-feature-detection.
+ + commit 49d5b9dcd622cdc87fb02a211bd51e3d46345bf2
+ * configure.ac: Implement new disable flag.
+
+ mpi: Improve support for non-Weierstrass support.
+ + commit 4d8c8c7aa88cddb1624301957e6245405f46d027
+ * mpi/ec.c (ec_p_init): Add args MODEL and P. Change all callers.
+ (_gcry_mpi_ec_p_internal_new): Ditto.
+ (_gcry_mpi_ec_p_new): Ditto.
+ * cipher/ecc-curves.c (_gcry_ecc_fill_in_curve): Return
+ GPG_ERR_UNKNOWN_CURVE instead of invalid value. Init curve model.
+ * cipher/ecc.c (ecc_verify, ecc_encrypt_raw): Ditto.
+ * cipher/pubkey.c (sexp_data_to_mpi): Fix EDDSA flag error checking.
+
+ mpi: Add gcry_mpi_ec_curve_point.
+ + commit ddfefe429660cc5d798f3517208936449247ae5c
+ * mpi/ec.c (_gcry_mpi_ec_curve_point): New.
+ (ec_powm): Return the absolute value.
+ * src/visibility.c, src/visibility.c: Add wrappers.
+ * src/libgcrypt.def, src/libgcrypt.vers: Export them.
+
+ mpi: Add functions to manipulate the sign.
+ + commit 1bd2c67aa55b40589654d3fa5dea05cf1ed7dc5f
+ * src/gcrypt.h.in (gcry_mpi_is_neg): New.
+ (gcry_mpi_neg, gcry_mpi_abs): New.
+ * mpi/mpiutil.c (_gcry_mpi_is_neg): New.
+ (_gcry_mpi_neg, _gcry_mpi_abs): New.
+ * src/visibility.c, src/visibility.h: Add wrappers.
+ * src/libgcrypt.def, src/libgcrypt.vers: Export them.
+ * src/mpi.h (mpi_is_neg): New. Rename old macro to mpi_has_sign.
+ * mpi/mpi-mod.c (_gcry_mpi_mod_barrett): Use mpi_has_sign.
+ * mpi/mpi-mpow.c (calc_barrett): Ditto.
+ * cipher/primegen.c (_gcry_derive_x931_prime): Ditto
+ * cipher/rsa.c (secret): Ditto.
+
+2013-09-06 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Tune armv6 mpi assembly.
+ + commit 4e4440153258e2f0dfdcaa8443820af06984ecb1
+ * mpi/armv6/mpih-mul1.S: Tune assembly for Cortex-A8.
+ * mpi/armv6/mpih-mul2.S: Ditto.
+ * mpi/armv6/mpih-mul3.S: Ditto.
+
+2013-09-05 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Change _gcry_burn_stack take burn depth as unsigned integer.
+ + commit e0ae31fcce3bd57b24751ff3c82cba820e493c3a
+ * src/misc.c (_gcry_burn_stack): Change to handle 'unsigned int' bytes.
+
+ mpicalc: fix building on linux and win32.
+ + commit 50ec983666f0ca9d50c84aa1afad0d7bd5810779
+ * src/Makefile.am (mpicalc): Adjust CFLAGS and LDADD.
+
+2013-09-04 Werner Koch <wk@gnupg.org>
+
+ Change mpicalc to use Libgcrypt and install it.
+ + commit 1d23040b659661b4086c079cb9fd5f37189a7020
+ * src/mpicalc.c: Make use of gcry_ functions.
+ (MPICALC_VERSION): New. Set to 2.0.
+ (strusage): Remove.
+ (scan_mpi): New. Replaces mpi_fromstr.
+ (print_mpi): New. Replaces mpi_print.
+ (my_getc): New.
+ (print_help): New.
+ (main): Use simple option parser and print version info.
+ * src/Makefile.am (bin_PROGRAMS): Add mpicalc.
+ (mpicalc_SOURCES, mpicalc_CFLAGS, mpicalc_LDADD): New.
+
+ Add mpicalc.c to help with testing.
+ + commit a70c46e29c480fa0f56ab4814666a5b115f84fd7
+ * src/mpicalc.c: Take from GnuPG 1.4
+
+ Prepare support for EdDSA.
+ + commit c47d4001033f68212d2847b3074a0bdda990342e
+ * src/cipher.h (PUBKEY_FLAG_EDDSA): New.
+ * cipher/pubkey.c (pubkey_verify): Repalce args CMP and OPAQUEV by
+ CTX. Pass flags and hash algo to the verify function. Change all
+ verify functions to accept these args.
+ (sexp_data_to_mpi): Implement new flag "eddsa".
+ (gcry_pk_verify): Pass CTX instead of the compare function to
+ pubkey_verify.
+ * cipher/ecc.c (sign): Rename to sign_ecdsa. Change all callers.
+ (verify): Rename to verify_ecdsa. Change all callers.
+ (sign_eddsa, verify_eddsa): New stub functions.
+ (ecc_sign): Divert to sign_ecdsa or sign_eddsa.
+ (ecc_verify): Divert to verify_ecdsa or verify_eddsa.
+
+ Prepare support for non-Weierstrass EC equations.
+ + commit c26be7a337d0bf98193bc58e043209e46d0769bb
+ * src/mpi.h (gcry_mpi_ec_models): New.
+ * src/ec-context.h (mpi_ec_ctx_s): Add MODEL.
+ * cipher/ecc-common.h (elliptic_curve_t): Ditto.
+ * cipher/ecc-curves.c (ecc_domain_parms_t): Ditto.
+ (domain_parms): Mark als as Weierstrass.
+ (_gcry_ecc_fill_in_curve): Check model.
+ (_gcry_ecc_get_curve): Set model to Weierstrass.
+ * cipher/ecc-misc.c (_gcry_ecc_model2str): New.
+ * cipher/ecc.c (generate_key, ecc_generate_ext): Print model in the
+ debug output.
+
+ * mpi/ec.c (_gcry_mpi_ec_dup_point): Switch depending on model.
+ Factor code out to ...
+ (dup_point_weierstrass): new.
+ (dup_point_montgomery, dup_point_twistededwards): New stub functions.
+ (_gcry_mpi_ec_add_points): Switch depending on model. Factor code out
+ to ...
+ (add_points_weierstrass): new.
+ (add_points_montgomery, add_points_twistededwards): New stub
+ functions.
+
+ * tests/Makefile.am (TESTS): Reorder tests.
+
+ mpi: Suppress newer gcc warnings.
+ + commit 8698530b2f9ef95542f1dd550961de7af86cc256
+ * src/g10lib.h (GCC_ATTR_UNUSED): Define for gcc >= 3.5.
+ * mpi/mpih-div.c (_gcry_mpih_mod_1, _gcry_mpih_divmod_1): Mark dummy
+ as unused.
+ * mpi/mpi-internal.h (UDIV_QRNND_PREINV): Mark _ql as unused.
+
+ Do not check with cpp for typedefed constants.
+ + commit b28b1f732e1b4f9c62a9de87c22c6bb0d3f8fdb8
+ * src/gcrypt-int.h: Include error code replacements depeding on the
+ version of libgpg-error.
+
+2013-09-04 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Make _gcry_burn_stack use variable length array.
+ + commit 4b0edf53440239d3bcc95941980c062a0801a149
+ * configure.ac (HAVE_VLA): Add check.
+ * src/misc.c (_gcry_burn_stack) [HAVE_VLA]: Add VLA code.
+
+ Move stack burning from block ciphers to cipher modes.
+ + commit a3aaa6ad03388ea3eaa24304b604cb864633332f
+ * src/gcrypt-module.h (gcry_cipher_encrypt_t)
+ (gcry_cipher_decrypt_t): Return 'unsigned int'.
+ * cipher/cipher.c (dummy_encrypt_block, dummy_decrypt_block): Return
+ zero.
+ (do_ecb_encrypt, do_ecb_decrypt): Get largest stack burn depth from
+ block cipher crypt function and burn stack at end.
+ * cipher/cipher-aeswrap.c (_gcry_cipher_aeswrap_encrypt)
+ (_gcry_cipher_aeswrap_decrypt): Ditto.
+ * cipher/cipher-cbc.c (_gcry_cipher_cbc_encrypt)
+ (_gcry_cipher_cbc_decrypt): Ditto.
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb_encrypt)
+ (_gcry_cipher_cfb_decrypt): Ditto.
+ * cipher/cipher-ctr.c (_gcry_cipher_cbc_encrypt): Ditto.
+ * cipher/cipher-ofb.c (_gcry_cipher_ofb_encrypt)
+ (_gcry_cipher_ofb_decrypt): Ditto.
+ * cipher/blowfish.c (encrypt_block, decrypt_block): Return burn stack
+ depth.
+ * cipher/camellia-glue.c (camellia_encrypt, camellia_decrypt): Ditto.
+ * cipher/cast5.c (encrypt_block, decrypt_block): Ditto.
+ * cipher/des.c (do_tripledes_encrypt, do_tripledes_decrypt)
+ (do_des_encrypt, do_des_decrypt): Ditto.
+ * cipher/idea.c (idea_encrypt, idea_decrypt): Ditto.
+ * cipher/rijndael.c (rijndael_encrypt, rijndael_decrypt): Ditto.
+ * cipher/seed.c (seed_encrypt, seed_decrypt): Ditto.
+ * cipher/serpent.c (serpent_encrypt, serpent_decrypt): Ditto.
+ * cipher/twofish.c (twofish_encrypt, twofish_decrypt): Ditto.
+ * cipher/rfc2268.c (encrypt_block, decrypt_block): New.
+ (_gcry_cipher_spec_rfc2268_40): Use encrypt_block and decrypt_block.
+
+2013-09-01 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ camellia-aesni-avx2-amd64: Move register clearing to assembly functions.
+ + commit f3515240de9513ead975985c9f8ab714022cac8e
+ * cipher/camellia-aesni-avx2-amd64.S
+ (_gcry_camellia_aesni_avx2_ctr_enc): Add 'vzeroall'.
+ (_gcry_camellia_aesni_avx2_cbc_dec)
+ (_gcry_camellia_aesni_avx2_cfb_dec): Add 'vzeroupper' at head and
+ 'vzeroall' at tail.
+ * cipher/camellia-glue.c (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec)
+ (_gcry_serpent_avx2_cfb_dec) [USE_AESNI_AVX2]: Remove register
+ clearing.
+
+ camellia-aesni-avx-amd64: Move register clearing to assembly functions.
+ + commit 8b735cb563dff7aafbf8a970972522b5621e665c
+ * cipher/camellia-aesni-avx-amd64.S (_gcry_camellia_aesni_avx_ctr_enc)
+ (_gcry_camellia_aesni_avx_cbc_dec)
+ (_gcry_camellia_aesni_avx_cfb_dec): Add 'vzeroupper' at head and
+ 'vzeroall' at tail.
+ * cipher/camellia-glue.c (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec)
+ (_gcry_serpent_avx2_cfb_dec) [USE_AESNI_AVX]: Remove register clearing.
+
+ serpent-avx2-amd64: Move register clearing to assembly.
+ + commit d12828cd821a4b4428eae19de5aee02cf536e536
+ * cipher/serpent-avx2-amd64.S (_gcry_serpent_avx2_ctr_enc)
+ (_gcry_serpent_avx2_cbc_dec, _gcry_serpent_avx2_cfb_dec): Change last
+ 'vzeroupper' to 'vzeroall'.
+ * cipher/serpent.c (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec)
+ (_gcry_serpent_avx2_cfb_dec) [USE_AVX2]: Remove register clearing with
+ 'vzeroall'.
+
+ Fix building for x32 target.
+ + commit fd6721c235a5bdcb332c8eb708fbd4f96e52e824
+ * mpi/amd64/mpi-asm-defs.h: New file.
+ * random/rndhw.c (poll_padlock) [__x86_64__]: Also check if __LP64__ is
+ defined.
+ [USE_DRNG, __x86_64__]: Also check if __LP64__ is defined.
+
+2013-08-31 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ sha512: add ARM/NEON assembly version of transform function.
+ + commit 99d15543b8d94a8f1ef66c6ccb862b0ce82c514d
+ * cipher/Makefile.am: Add 'sha512-armv7-neon.S'.
+ * cipher/sha512-armv7-neon.S: New file.
+ * cipher/sha512.c (USE_ARM_NEON_ASM): New macro.
+ (SHA512_CONTEXT) [USE_ARM_NEON_ASM]: Add 'use_neon'.
+ (sha512_init, sha384_init) [USE_ARM_NEON_ASM]: Enable 'use_neon' if
+ CPU support NEON instructions.
+ (k): Round constant array moved outside of 'transform' function.
+ (__transform): Renamed from 'tranform' function.
+ [USE_ARM_NEON_ASM] (_gcry_sha512_transform_armv7_neon): New prototype.
+ (transform): New wrapper function for different transform versions.
+ (sha512_write, sha512_final): Burn stack by the amount returned by
+ transform function.
+ * configure.ac (sha512) [neonsupport]: Add 'sha512-armv7-neon.lo'.
+
+ sha512: reduce stack use in transform function by 512 bytes.
+ + commit 03da7f8ba3ec24d4639a2bcebbc0d9d831734c08
+ * cipher/sha512.c (transform): Change 'u64 w[80]' to 'u64 w[16]' and
+ inline input expansion to first 64 rounds.
+ (sha512_write, sha512_final): Reduce burn_stack depth by 512 bytes.
+
+ Add ARM HW feature detection module and add NEON detection.
+ + commit 9c95be105f518d18407115c2c06893857c24b116
+ * configure.ac: Add option --disable-neon-support.
+ (HAVE_GCC_INLINE_ASM_NEON): New.
+ (ENABLE_NEON_SUPPORT): New.
+ [arm]: Add 'hwf-arm.lo' as HW feature module.
+ * src/Makefile.am: Add 'hwf-arm.c'.
+ * src/g10lib.h (HWF_ARM_NEON): New macro.
+ * src/global.c (hwflist): Add HWF_ARM_NEON entry.
+ * src/hwf-arm.c: New file.
+ * src/hwf-common.h (_gcry_hwf_detect_arm): New prototype.
+ * src/hwfeatures.c (_gcry_detect_hw_features) [HAVE_CPU_ARCH_ARM]: Add
+ call to _gcry_hwf_detect_arm.
+
+ Correct mpi_cpu_arch for ARMv6.
+ + commit 7b0ebe69fe35f2ee13e1e1beb2766a1eaadb7f0c
+ * mpi/config.links [armv6]: Set mpi_cpu_arch to "arm", instead of
+ "armv6".
+
+2013-08-30 Werner Koch <wk@gnupg.org>
+
+ mpi: Make gcry_mpi_print work with negative zeroes.
+ + commit e9b711e6ddb480a71d2996465074e436c752c005
+ * mpi/mpicoder.c (gcry_mpi_print): Take care of negative zero.
+ (gcry_mpi_aprint): Allocate at least 1 byte.
+ * tests/t-convert.c: New.
+ * tests/Makefile.am (TESTS): Add t-convert.
+
+ Refactor the ECC code into 3 files.
+ + commit 800d4e01376d52a94a157b53978c7c3f957fc476
+ * cipher/ecc-common.h, cipher/ecc-curves.c, cipher/ecc-misc.c: New.
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add new files.
+ * configure.ac (GCRYPT_PUBKEY_CIPHERS): Add new .c files.
+ * cipher/ecc.c (curve_aliases, ecc_domain_parms_t, domain_parms)
+ (scanval): Move to ecc-curves.c.
+ (fill_in_curve): Move to ecc-curve.c as _gcry_ecc_fill_in_curve.
+ (ecc_get_curve): Move to ecc-curve.c as _gcry_ecc_get_curve.
+ (_gcry_mpi_ec_ec2os): Move to ecc-misc.c.
+ (ec2os): Move to ecc-misc.c as _gcry_ecc_ec2os.
+ (os2ec): Move to ecc-misc.c as _gcry_ecc_os2ec.
+ (point_set): Move as inline function to ecc-common.h.
+ (_gcry_ecc_curve_free): Move to ecc-misc.c as _gcry_ecc_curve_free.
+ (_gcry_ecc_curve_copy): Move to ecc-misc.c as _gcry_ecc_curve_copy.
+ (mpi_from_keyparam, point_from_keyparam): Move to ecc-curves.c.
+ (_gcry_mpi_ec_new): Move to ecc-curves.c.
+ (ecc_get_param): Move to ecc-curves.c as _gcry_ecc_get_param.
+ (ecc_get_param_sexp): Move to ecc-curves.c as _gcry_ecc_get_param_sexp.
+
+2013-08-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ serpent-sse2-amd64: Move register clearing to assembly functions.
+ + commit 040aa7688296e93659cb32ca31e9a001a6ab1edd
+ cipher/serpent-sse2-amd64.S (_gcry_serpent_sse2_ctr_enc)
+ (_gcry_serpent_sse2_cbc_dec, _gcry_serpent_sse2_cfb_dec): Clear used
+ XMM registers.
+ cipher/serpent.c (_gcry_serpent_ctr_enc, _gcry_serpent_cbc_dec)
+ ( _gcry_serpent_cfb_dec) [USE_SSE2]: Remove XMM register clearing from
+ bulk functions.
+
+ twofish-amd64: do not make __twofish_dec_blk3 global.
+ + commit 82db04a6a0058cf870485459abe7c1659b138ec5
+ * cipher/twofish-amd64.S (__twofish_dec_blk3): Do not export symbol as
+ global.
+ (__twofish_dec_blk3): Mark symbol as function.
+
+2013-08-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ mpi: add ARMv6 assembly.
+ + commit da327aef3fe24fdf98fffbc8aea69de42ed12456
+ * mpi/armv6/mpi-asm-defs.h: New.
+ * mpi/armv6/mpih-add1.S: New.
+ * mpi/armv6/mpih-mul1.S: New.
+ * mpi/armv6/mpih-mul2.S: New.
+ * mpi/armv6/mpih-mul3.S: New.
+ * mpi/armv6/mpih-sub1.S: New.
+ * mpi/config.links [arm]: Enable ARMv6 assembly.
+
+ Move ARMv6 detection to configure.ac.
+ + commit 151f1e518be2d16bed748ba832384b0472ddcf9b
+ * cipher/blowfish-armv6.S: Replace __ARM_ARCH >= 6 checks with
+ HAVE_ARM_ARCH_V6.
+ * cipher/blowfish.c: Ditto.
+ * cipher/camellia-armv6.S: Ditto.
+ * cipher/camellia.h: Ditto.
+ * cipher/cast5-armv6.S: Ditto.
+ * cipher/cast5.c: Ditto.
+ * cipher/rijndael-armv6.S: Ditto.
+ * cipher/rijndael.c: Ditto.
+ * configure.ac: Add HAVE_ARM_ARCH_V6 check.
+
+2013-08-19 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add optimized wipememory for ARM.
+ + commit c030e33533fb819afe195eff5f89ec39863b1fbc
+ src/g10lib.h [__arm__] (fast_wipememory2_unaligned_head)
+ (fast_wipememory2): New macros.
+
+ cipher: bufhelp: allow unaligned memory accesses on ARM.
+ + commit 796dda37b957b20dba391343937c6325a8c8b288
+ * cipher/bufhelp.h [__arm__ && __ARM_FEATURE_UNALIGNED]: Enable
+ BUFHELP_FAST_UNALIGNED_ACCESS.
+
+2013-08-17 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Remove burn_stack optimization.
+ + commit 79895b9459b9bf8c60cb7abf09d5bf16ed0cf6e3
+ * src/misc.c (_gcry_burn_stack): Remove SIZEOF_UNSIGNED_LONG == 4 or 8
+ optimization.
+
+2013-08-16 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ camellia: add ARMv6 assembly implementation.
+ + commit cafadc1e4fb97581262b0081ba251e05613d4394
+ * cipher/Makefile.am: Add 'camellia-armv6.S'.
+ * cipher/camellia-armv6.S: New file.
+ * cipher/camellia-glue.c [USE_ARMV6_ASM]
+ (_gcry_camellia_armv6_encrypt_block)
+ (_gcry_camellia_armv6_decrypt_block): New prototypes.
+ [USE_ARMV6_ASM] (Camellia_EncryptBlock, Camellia_DecryptBlock)
+ (camellia_encrypt, camellia_decrypt): New functions.
+ * cipher/camellia.c [!USE_ARMV6_ASM]: Compile encryption and decryption
+ routines if USE_ARMV6_ASM macro is _not_ defined.
+ * cipher/camellia.h (USE_ARMV6_ASM): New macro.
+ [!USE_ARMV6_ASM] (Camellia_EncryptBlock, Camellia_DecryptBlock): If
+ USE_ARMV6_ASM is defined, disable these function prototypes.
+ (camellia) [arm]: Add 'camellia-armv6.lo'.
+
+ blowfish: add ARMv6 assembly implementation.
+ + commit 31e4b1a96a07e9a3698fcb7be0643a136ebb8e5c
+ * cipher/Makefile.am: Add 'blowfish-armv6.S'.
+ * cipher/blowfish-armv6.S: New file.
+ * cipher/blowfish.c (USE_ARMV6_ASM): New macro.
+ [USE_ARMV6_ASM] (_gcry_blowfish_armv6_do_encrypt)
+ (_gcry_blowfish_armv6_encrypt_block)
+ (_gcry_blowfish_armv6_decrypt_block, _gcry_blowfish_armv6_ctr_enc)
+ (_gcry_blowfish_armv6_cbc_dec, _gcry_blowfish_armv6_cfb_dec): New
+ prototypes.
+ [USE_ARMV6_ASM] (do_encrypt, do_encrypt_block, do_decrypt_block)
+ (encrypt_block, decrypt_block): New functions.
+ (_gcry_blowfish_ctr_enc) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ (_gcry_blowfish_cbc_dec) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ (_gcry_blowfish_cfb_dec) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ * configure.ac (blowfish) [arm]: Add 'blowfish-armv6.lo'.
+
+ cast5: add ARMv6 assembly implementation.
+ + commit 8d1faf56714598301580ce370e0bfa6d65e73644
+ * cipher/Makefile.am: Add 'cast5-armv6.S'.
+ * cipher/cast5-armv6.S: New file.
+ * cipher/cast5.c (USE_ARMV6_ASM): New macro.
+ (CAST5_context) [USE_ARMV6_ASM]: New members 'Kr_arm_enc' and
+ 'Kr_arm_dec'.
+ [USE_ARMV6_ASM] (_gcry_cast5_armv6_encrypt_block)
+ (_gcry_cast5_armv6_decrypt_block, _gcry_cast5_armv6_ctr_enc)
+ (_gcry_cast5_armv6_cbc_dec, _gcry_cast5_armv6_cfb_dec): New prototypes.
+ [USE_ARMV6_ASM] (do_encrypt_block, do_decrypt_block, encrypt_block)
+ (decrypt_block): New functions.
+ (_gcry_cast5_ctr_enc) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ (_gcry_cast5_cbc_dec) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ (_gcry_cast5_cfb_dec) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ (do_cast_setkey) [USE_ARMV6_ASM]: Initialize 'Kr_arm_enc' and
+ 'Kr_arm_dec'.
+ * configure.ac (cast5) [arm]: Add 'cast5-armv6.lo'.
+
+2013-08-14 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rijndael: add ARMv6 assembly implementation.
+ + commit f365961422f1c8b3d89b8bcd9c99828f38c1f158
+ * cipher/Makefile.am: Add 'rijndael-armv6.S'.
+ * cipher/rijndael-armv6.S: New file.
+ * cipher/rijndael.c (USE_ARMV6_ASM): New macro.
+ [USE_ARMV6_ASM] (_gcry_aes_armv6_encrypt_block)
+ (_gcry_aes_armv6_decrypt_block): New prototypes.
+ (do_encrypt_aligned) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ (do_encrypt): Disable input/output alignment when USE_ARMV6_ASM.
+ (do_decrypt_aligned) [USE_ARMV6_ASM]: Use ARMv6 assembly function.
+ (do_decrypt): Disable input/output alignment when USE_ARMV6_ASM.
+ * configure.ac (HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS): New check for
+ gcc/as compatibility with ARM assembly implementations.
+ (aes) [arm]: Add 'rijndael-armv6.lo'.
+
+2013-08-09 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: fix memory leak.
+ + commit 2b5bbe264fcd61e5e458e5f71a6507ba0271c729
+ * cipher/pubkey.c (gcry_pk_sign): Handle the specific case of ECC,
+ where there is NULL whichi is not the sentinel.
+
+2013-08-08 Werner Koch <wk@gnupg.org>
+
+ mpi: Clear immutable flag on the result of gcry_mpi_set.
+ + commit 426cbc9feca0c8f46208fb3670adab95f9e46087
+ * mpi/mpiutil.c (gcry_mpi_set): Reset immutable and const flags.
+ * tests/mpitests.c (test_const_and_immutable): Add a test for this.
+
+2013-08-07 NIIBE Yutaka <gniibe@fsij.org>
+
+ tests: fix memory leaks.
+ + commit cc082642c1b0f2a3e9ca78e1ffd3f64417c204bd
+ * tests/benchmark.c (dsa_bench): Release SIG.
+
+ * tests/mpitests.c (test_powm): Release BASE, EXP, MOD, and RES.
+
+ * tests/prime.c (check_primes): Release PRIME.
+
+ * tests/tsexp.c (basic): Use intermediate variable M for constant.
+ Release S1, S2 and A.
+
+2013-08-07 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix building on W32 (cannot export symbol 'gcry_sexp_get_buffer')
+ + commit 065d446478bf68553339fc77a89b8369bd110a18
+ * src/libgcrypt.def: Change 'gcry_sexp_get_buffer' to
+ 'gcry_sexp_nth_buffer'.
+
+2013-08-06 NIIBE Yutaka <gniibe@fsij.org>
+
+ cipher: fix another memory leak.
+ + commit 9a421813123a2f5db0a91eaee4a45138efc9ad34
+ * cipher/ecc.c (ecc_get_curve): Free TMP.
+
+ tests: fix memory leaks.
+ + commit 87eddc31ccba6decbddd1761dd42a208666cd311
+ * tests/pubkey.c (check_keys_crypt): Release L, X0, and X1.
+ (check_keys): Release X.
+
+ cipher: fix memory leaks.
+ + commit ae6ffd9af38cbcac57c220960f683aab91db85cb
+ * cipher/elgamal.c (elg_generate_ext): Free XVALUE.
+
+ * cipher/pubkey.c (sexp_elements_extract): Don't use IDX for loop.
+ Call mpi_free.
+ (sexp_elements_extract_ecc): Call mpi_free.
+
+2013-08-05 Werner Koch <wk@gnupg.org>
+
+ mpi: Improve gcry_mpi_invm to detect bad input.
+ + commit d8e99a04dba6a606e879464cd11deee760d1e000
+ * mpi/mpi-inv.c (gcry_mpi_invm): Return 0 for bad input.
+
+2013-07-31 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Correct checks for ecc secret key.
+ + commit 10dfa41b43a906031bc674ea41cd3073701011f3
+ * cipher/ecc.c (check_secret_key): replace wrong comparison of Q and
+ sk->Q points with correct one.
+
+2013-07-29 Werner Koch <wk@gnupg.org>
+
+ sexp: Allow white space anywhere in a hex format.
+ + commit 43320961a8751ee28dc95cdb0ae01ea8a7ff7f91
+ * src/sexp.c (hextobyte): Remove.
+ (hextonibble): New.
+ (vsexp_sscan): Skip whtespace between hex nibbles.
+
+ Implement deterministic ECDSA as specified by rfc-6979.
+ + commit 6e0a9786637d649b48aae0e611a12e12beef9b3b
+ * cipher/ecc.c (sign): Add args FLAGS and HASHALGO. Convert an opaque
+ MPI as INPUT. Implement rfc-6979.
+ (ecc_sign): Remove the opaque MPI code and pass FLAGS to sign.
+ (verify): Do not allocate and compute Y; it is not used.
+ (ecc_verify): Truncate the hash value if needed.
+ * tests/dsa-rfc6979.c (check_dsa_rfc6979): Add ECDSA test cases.
+
+2013-07-26 Werner Koch <wk@gnupg.org>
+
+ Implement deterministic DSA as specified by rfc-6979.
+ + commit 1cfa79aabc5d0fd8d124901054475e90ab7d9cde
+ * cipher/dsa.c (dsa_sign): Move opaque mpi extraction to sign.
+ (sign): Add args FLAGS and HASHALGO. Implement deterministic DSA.
+ Add code path for R==0 to comply with the standard.
+ (dsa_verify): Left fill opaque mpi based hash values.
+ * cipher/dsa-common.c (int2octets, bits2octets): New.
+ (_gcry_dsa_gen_rfc6979_k): New.
+ * tests/dsa-rfc6979.c: New.
+ * tests/Makefile.am (TESTS): Add dsa-rfc6979.
+
+ Allow the use of a private-key s-expression with gcry_pk_verify.
+ + commit b72d312ad11887fc416aa821786f6bdb663c0f4a
+ * cipher/pubkey.c (sexp_to_key): Fallback to private key.
+
+2013-07-25 Werner Koch <wk@gnupg.org>
+
+ Mitigate a flush+reload cache attack on RSA secret exponents.
+ + commit 287bf0e543f244d784cf8b58340bf0ab3c6aba97
+ * mpi/mpi-pow.c (gcry_mpi_powm): Always perfrom the mpi_mul for
+ exponents in secure memory.
+
+2013-07-19 Werner Koch <wk@gnupg.org>
+
+ pk: Allow the use of a hash element for DSA sign and verify.
+ + commit 37d0a1ebdc2dc74df4fb6bf0621045018122a68f
+ * cipher/pubkey.c (pubkey_sign): Add arg ctx and pass it to the sign
+ module.
+ (gcry_pk_sign): Pass CTX to pubkey_sign.
+ (sexp_data_to_mpi): Add flag rfc6979 and code to alls hash with *DSA
+ * cipher/rsa.c (rsa_sign, rsa_verify): Return an error if an opaque
+ MPI is given for DATA/HASH.
+ * cipher/elgamal.c (elg_sign, elg_verify): Ditto.
+ * cipher/dsa.c (dsa_sign, dsa_verify): Convert a given opaque MPI.
+ * cipher/ecc.c (ecc_sign, ecc_verify): Ditto.
+ * tests/basic.c (check_pubkey_sign_ecdsa): Add a test for using a hash
+ element with DSA.
+
+ sexp: Add function gcry_sexp_nth_buffer.
+ + commit 2d3e8d4d9562d666420aadd9ffa8ac0456a1cd91
+ * src/sexp.c (gcry_sexp_nth_buffer): New.
+ * src/visibility.c, src/visibility.h: Add function wrapper.
+ * src/libgcrypt.vers, src/libgcrypt.def: Add to API.
+ * src/gcrypt.h.in: Add prototype.
+
+2013-07-18 Werner Koch <wk@gnupg.org>
+
+ Add support for Salsa20.
+ + commit c4885092088431e7928e4459fda20cc0e8ceb201
+ * src/gcrypt.h.in (GCRY_CIPHER_SALSA20): New.
+ * cipher/salsa20.c: New.
+ * configure.ac (available_ciphers): Add Salsa20.
+ * cipher/cipher.c: Register Salsa20.
+ (cipher_setiv): Allow to divert an IV to a cipher module.
+ * src/cipher-proto.h (cipher_setiv_func_t): New.
+ (cipher_extra_spec): Add field setiv.
+ * src/cipher.h: Declare Salsa20 definitions.
+ * tests/basic.c (check_stream_cipher): New.
+ (check_stream_cipher_large_block): New.
+ (check_cipher_modes): Run new test functions.
+ (check_ciphers): Add simple test for Salsa20.
+
+2013-07-17 Werner Koch <wk@gnupg.org>
+
+ Allow gcry_mpi_dump to print opaque MPIs.
+ + commit 364d019e3ffedfcb434576702f73e767cb9389ef
+ * mpi/mpicoder.c (gcry_mpi_dump): Detect abd print opaque MPIs.
+ * tests/mpitests.c (test_opaque): New.
+ (main): Call new test.
+
+ cipher: Prepare to pass extra info to the sign functions.
+ + commit 5940e66cbefea3de5924f494f18aed69bb694bff
+ * src/gcrypt-module.h (gcry_pk_sign_t): Add parms flags and hashalgo.
+ * cipher/rsa.c (rsa_sign): Add parms and mark them as unused.
+ * cipher/dsa.c (dsa_sign): Ditto.
+ * cipher/elgamal.c (elg_sign): Ditto.
+ * cipher/pubkey.c (dummy_sign): Ditto.
+ (pubkey_sign): Pass 0 for the new args.
+
+ Fix a special case bug in mpi_powm for e==0.
+ + commit 6e1adb05d290aeeb1c230c763970695f4a538526
+ * mpi/mpi-pow.c (gcry_mpi_powm): For a zero exponent, make sure that
+ the result has been allocated.
+
+2013-07-15 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+
+ Fix memory leak in t-mpi-point test.
+ + commit a7b80e9fba6b1b095f7c53469747967b40ebfbfd
+ * tests/t-mpi-point.c (basic_ec_math, basic_ec_math_simplified): add
+ calls to gcry_ctx_release() to free contexts after they become unused.
+
+2013-07-10 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Fix 'Please include winsock2.h before windows.h' warnings with mingw32.
+ + commit d6c9c86cb7f571ae0bd9aee4efa01a0f9c4c3104
+ * random/rndw32.c: include winsock2.h before windows.h.
+ * src/ath.h [_WIN32]: Ditto.
+ * tests/benchmark.c [_WIN32]: Ditto.
+
+ Remove duplicate header from mpi/amd64/mpih-mul2.S.
+ + commit c64a0dcbefc5b0055954e37a3c86b32ff7a1b1da
+ * mpi/amd64/mpih-mul2.S: remove duplicated header.
+
+ Fix i386/amd64 inline assembly "cc" clobbers.
+ + commit ed0a598172208ec67234a4edd73189bf6808fd04
+ * cipher/bithelp.h [__GNUC__, __i386__] (rol, ror): add "cc" globber
+ for inline assembly.
+ * cipher/cast5.c [__GNUC__, __i386__] (rol): Ditto.
+ * random/rndhw.c [USE_DRNG] (rdrand_long): Ditto.
+ * src/hmac256.c [__GNUC__, __i386__] (ror): Ditto.
+ * mpi/longlong.c [__i386__] (add_ssaaaa, sub_ddmmss, umul_ppmm)
+ (udiv_qrnnd, count_leading_zeros, count_trailing_zeros): Ditto.
+
+ bufhelp: Suppress 'cast increases required alignment' warning.
+ + commit c3902a6b5cea9acef2e15fbee24eb601eeb25168
+ * cipher/bufhelp.h (buf_xor, buf_xor_2dst, buf_xor_n_copy): Cast
+ to larger element pointer through (void *) to suppress -Wcast-error.
+
+ mpi: Add __ARM_ARCH for older GCC.
+ + commit 97f392f43cf2e4da1297cbecacbfbff33a869478
+ * mpi/longlong.h [__arm__]: Construct __ARM_ARCH if not provided by
+ compiler.
+
+ mpi: add missing "cc" clobber for ARM assembly.
+ + commit 8aa4f2161cf643ce36d87d2e2786b546736f8232
+ * mpi/longlong.h [__arm__] (add_ssaaaa, sub_ddmmss): Add __CLOBBER_CC.
+ [__arm__][__ARM_ARCH <= 3] (umul_ppmm): Ditto.
+
+ Tweak ARM inline assembly for mpi.
+ + commit 71dda4507053379433dc8b0fc6462c15de7299df
+ mpi/longlong.h [__arm__]: Enable inline assembly if __thumb2__ is
+ defined.
+ [__arm__]: Use __ARCH_ARM when defined.
+ [__arm__] [__ARM_ARCH >= 5] (count_leading_zeros): New.
+
+2013-06-26 Werner Koch <wk@gnupg.org>
+
+ Make gpg-error replacement defines more robust.
+ + commit 6540b84a6e9113813e7e49e3ad2024d4a0073300
+ * configure.ac (AH_BOTTOM): Move GPG_ERR_ replacement defines to ...
+ * src/gcrypt-int.h: new file.
+ * src/visibility.h, src/cipher.h: Replace gcrypt.h by gcrypt-int.h.
+ * tests/: Ditto for all test files.
+
+2013-06-20 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Check if assembler is compatible with AMD64 assembly implementations.
+ + commit 3544fa8aa63bef9a35abf236e9376191b5ec206b
+ * cipher/blowfish-amd64.S: Enable only if
+ HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS is defined.
+ * cipher/camellia-aesni-avx-amd64.S: Ditto.
+ * cipher/camellia-aesni-avx2-amd64.S: Ditto.
+ * cipher/cast5-amd64.S: Ditto.
+ * cipher/rinjdael-amd64.S: Ditto.
+ * cipher/serpent-avx2-amd64.S: Ditto.
+ * cipher/serpent-sse2-amd64.S: Ditto.
+ * cipher/twofish-amd64.S: Ditto.
+ * cipher/blowfish.c: Use AMD64 assembly implementation only if
+ HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS is defined
+ * cipher/camellia-glue.c: Ditto.
+ * cipher/cast5.c: Ditto.
+ * cipher/rijndael.c: Ditto.
+ * cipher/serpent.c: Ditto.
+ * cipher/twofish.c: Ditto.
+ * configure.ac: Check gcc/as compatibility with AMD64 assembly
+ implementations.
+
+2013-06-09 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Optimize _gcry_burn_stack for 32-bit and 64-bit architectures.
+ + commit ec2f8de409a93c80efa658134df22074a9bca5a4
+ * src/misc.c (_gcry_burn_stack): Add optimization for 32-bit and 64-bit
+ architectures.
+
+ Add Camellia AES-NI/AVX2 implementation.
+ + commit d94ec5f5f8a5d40a7d344025aa466f276f9718df
+ * cipher/Makefile.am: Add 'camellia-aesni-avx2-amd64.S'.
+ * cipher/camellia-aesni-avx2-amd64.S: New file.
+ * cipher/camellia-glue.c (USE_AESNI_AVX2): New macro.
+ (CAMELLIA_context) [USE_AESNI_AVX2]: Add 'use_aesni_avx2'.
+ [USE_AESNI_AVX2] (_gcry_camellia_aesni_avx2_ctr_enc)
+ (_gcry_camellia_aesni_avx2_cbc_dec)
+ (_gcry_camellia_aesni_avx2_cfb_dec): New prototypes.
+ (camellia_setkey) [USE_AESNI_AVX2]: Check AVX2+AES-NI capable hardware
+ and set 'ctx->use_aesni_avx2'.
+ (_gcry_camellia_ctr_enc) [USE_AESNI_AVX2]: Add AVX2 accelerated code.
+ (_gcry_camellia_cbc_dec) [USE_AESNI_AVX2]: Add AVX2 accelerated code.
+ (_gcry_camellia_cfb_dec) [USE_AESNI_AVX2]: Add AVX2 accelerated code.
+ (selftest_ctr_128, selftest_cbc_128, selftest_cfb_128): Grow 'nblocks'
+ so that AVX2 codepaths get tested.
+ * configure.ac (camellia) [avx2support, aesnisupport]: Add
+ 'camellia-aesni-avx2-amd64.lo'.
+
+ Add Serpent AVX2 implementation.
+ + commit e7ab4e1a7396f4609b9033207015b239ab4a5140
+ * cipher/Makefile.am: Add 'serpent-avx2-amd64.S'.
+ * cipher/serpent-avx2-amd64.S: New file.
+ * cipher/serpent.c (USE_AVX2): New macro.
+ (serpent_context_t) [USE_AVX2]: Add 'use_avx2'.
+ [USE_AVX2] (_gcry_serpent_avx2_ctr_enc, _gcry_serpent_avx2_cbc_dec)
+ (_gcry_serpent_avx2_cfb_dec): New prototypes.
+ (serpent_setkey_internal) [USE_AVX2]: Check for AVX2 capable hardware
+ and set 'use_avx2'.
+ (_gcry_serpent_ctr_enc) [USE_AVX2]: Use AVX2 accelerated functions.
+ (_gcry_serpent_cbc_dec) [USE_AVX2]: Use AVX2 accelerated functions.
+ (_gcry_serpent_cfb_dec) [USE_AVX2]: Use AVX2 accelerated functions.
+ (selftest_ctr_128, selftest_cbc_128, selftest_cfb_128): Grow 'nblocks'
+ so that AVX2 codepaths are tested.
+ * configure.ac (serpent) [avx2support]: Add 'serpent-avx2-amd64.lo'.
+
+ Add detection for Intel AVX2 instruction set.
+ + commit 3289bca708bdd02c69a331095ac6ca9a1efd74cc
+ * configure.ac: Add option --disable-avx2-support.
+ (HAVE_GCC_INLINE_ASM_AVX2): New.
+ (ENABLE_AVX2_SUPPORT): New.
+ * src/g10lib.h (HWF_INTEL_AVX2): New.
+ * src/global.c (hwflist): Add HWF_INTEL_AVX2.
+ * src/hwf-x86.c [__i386__] (get_cpuid): Initialize registers to zero
+ before cpuid.
+ [__x86_64__] (get_cpuid): Initialize registers to zero before cpuid.
+ (detect_x86_gnuc): Store maximum cpuid level.
+ (detect_x86_gnuc) [ENABLE_AVX2_SUPPORT]: Add detection for AVX2.
+
+ twofish: add amd64 assembly implementation.
+ + commit d325ab5d86e6107a46007a4d0131122bbd719f8c
+ * cipher/Makefile.am: Add 'twofish-amd64.S'.
+ * cipher/twofish-amd64.S: New file.
+ * cipher/twofish.c (USE_AMD64_ASM): New macro.
+ [USE_AMD64_ASM] (_gcry_twofish_amd64_encrypt_block)
+ (_gcry_twofish_amd64_decrypt_block, _gcry_twofish_amd64_ctr_enc)
+ (_gcry_twofish_amd64_cbc_dec, _gcry_twofish_amd64_cfb_dec): New
+ prototypes.
+ [USE_AMD64_ASM] (do_twofish_encrypt, do_twofish_decrypt)
+ (twofish_encrypt, twofish_decrypt): New functions.
+ (_gcry_twofish_ctr_enc, _gcry_twofish_cbc_dec, _gcry_twofish_cfb_dec)
+ (selftest_ctr, selftest_cbc, selftest_cfb): New functions.
+ (selftest): Call new bulk selftests.
+ * cipher/cipher.c (gcry_cipher_open) [USE_TWOFISH]: Register Twofish
+ bulk functions for ctr-enc, cbc-dec and cfb-dec.
+ * configure.ac (twofish) [x86_64]: Add 'twofish-amd64.lo'.
+ * src/cipher.h (_gcry_twofish_ctr_enc, _gcry_twofish_cbc_dec)
+ (gcry_twofish_cfb_dec): New prototypes.
+
+2013-05-29 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ rinjdael: add amd64 assembly implementation.
+ + commit 7317fcfadf00789df140e51c0d16b60f6b144b59
+ * cipher/Makefile.am: Add 'rijndael-amd64.S'.
+ * cipher/rijndael-amd64.S: New file.
+ * cipher/rijndael.c (USE_AMD64_ASM): New macro.
+ [USE_AMD64_ASM] (_gcry_aes_amd64_encrypt_block)
+ (_gcry_aes_amd64_decrypt_block): New prototypes.
+ (do_encrypt_aligned) [USE_AMD64_ASM]: Use amd64 assembly function.
+ (do_encrypt): Disable input/output alignment when USE_AMD64_ASM is set.
+ (do_decrypt_aligned) [USE_AMD64_ASM]: Use amd64 assembly function.
+ (do_decrypt): Disable input/output alignment when USE_AMD64_AES is set.
+ * configure.ac (aes) [x86-64]: Add 'rijndael-amd64.lo'.
+
+ blowfish: add amd64 assembly implementation.
+ + commit 9a61edd1f00cefe8ffa3ad54a53eed163883053c
+ * cipher/Makefile.am: Add 'blowfish-amd64.S'.
+ * cipher/blowfish-amd64.S: New file.
+ * cipher/blowfish.c (USE_AMD64_ASM): New macro.
+ [USE_AMD64_ASM] (_gcry_blowfish_amd64_do_encrypt)
+ (_gcry_blowfish_amd64_encrypt_block)
+ (_gcry_blowfish_amd64_decrypt_block, _gcry_blowfish_amd64_ctr_enc)
+ (_gcry_blowfish_amd64_cbc_dec, _gcry_blowfish_amd64_cfb_dec): New
+ prototypes.
+ [USE_AMD64_ASM] (do_encrypt, do_encrypt_block, do_decrypt_block)
+ (encrypt_block, decrypt_block): New functions.
+ (_gcry_blowfish_ctr_enc, _gcry_blowfish_cbc_dec)
+ (_gcry_blowfish_cfb_dec, selftest_ctr, selftest_cbc, selftest_cfb): New
+ functions.
+ (selftest): Call new bulk selftests.
+ * cipher/cipher.c (gcry_cipher_open) [USE_BLOWFISH]: Register Blowfish
+ bulk functions for ctr-enc, cbc-dec and cfb-dec.
+ * configure.ac (blowfish) [x86_64]: Add 'blowfish-amd64.lo'.
+ * src/cipher.h (_gcry_blowfish_ctr_enc, _gcry_blowfish_cbc_dec)
+ (gcry_blowfish_cfb_dec): New prototypes.
+
+2013-05-24 Werner Koch <wk@gnupg.org>
+
+ ecc: Simplify the compliant point generation.
+ + commit 99b18aa536703ef90c9a1f5c8f40bc68b2064593
+ * cipher/ecc.c (generate_key): Use point_snatch_set, replaces unneeded
+ variable copies, etc.
+
+ ecc: Fix a minor flaw in the generation of K.
+ + commit 9711384f75564a71979e3fb971b5f4cadcf1afef
+ * cipher/dsa.c (gen_k): Factor code out to ..
+ * cipher/dsa-common.c (_gcry_dsa_gen_k): new file and function. Add
+ arg security_level and re-indent a bit.
+ * cipher/ecc.c (gen_k): Remove and change callers to _gcry_dsa_gen_k.
+ * cipher/dsa.c: Include pubkey-internal.
+ * cipher/Makefile.am (libcipher_la_SOURCES): Add dsa-common.c
+
+2013-05-24 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ cast5: add amd64 assembly implementation.
+ + commit 0bdf26eea8cdbffefe7e37578f8f896c4f5f5275
+ * cipher/Makefile.am: Add 'cast5-amd64.S'.
+ * cipher/cast5-amd64.S: New file.
+ * cipher/cast5.c (USE_AMD64_ASM): New macro.
+ (_gcry_cast5_s1tos4): Merge arrays s1, s2, s3, s4 to single array to
+ simplify access from assembly implementation.
+ (s1, s2, s3, s4): New macros pointing to subarrays in
+ _gcry_cast5_s1tos4.
+ [USE_AMD64_ASM] (_gcry_cast5_amd64_encrypt_block)
+ (_gcry_cast5_amd64_decrypt_block, _gcry_cast5_amd64_ctr_enc)
+ (_gcry_cast5_amd64_cbc_dec, _gcry_cast5_amd64_cfb_dec): New prototypes.
+ [USE_AMD64_ASM] (do_encrypt_block, do_decrypt_block, encrypt_block)
+ (decrypt_block): New functions.
+ (_gcry_cast5_ctr_enc, _gcry_cast5_cbc_dec, _gcry_cast5_cfb_dec)
+ (selftest_ctr, selftest_cbc, selftest_cfb): New functions.
+ (selftest): Call new bulk selftests.
+ * cipher/cipher.c (gcry_cipher_open) [USE_CAST5]: Register CAST5 bulk
+ functions for ctr-enc, cbc-dec and cfb-dec.
+ * configure.ac (cast5) [x86_64]: Add 'cast5-amd64.lo'.
+ * src/cipher.h (_gcry_cast5_ctr_enc, _gcry_cast5_cbc_dec)
+ (gcry_cast5_cfb_dec): New prototypes.
+
+ cipher-selftest: make selftest work with any block-size.
+ + commit ab8fc70b5f0c396a5bc941267f59166e860b8c5d
+ * cipher/cipher-selftest.c (_gcry_selftest_helper_cbc_128)
+ (_gcry_selftest_helper_cfb_128, _gcry_selftest_helper_ctr_128): Renamed
+ functions from '<name>_128' to '<name>'.
+ (_gcry_selftest_helper_cbc, _gcry_selftest_helper_cfb)
+ (_gcry_selftest_helper_ctr): Make work with different block sizes.
+ * cipher/cipher-selftest.h (_gcry_selftest_helper_cbc_128)
+ (_gcry_selftest_helper_cfb_128, _gcry_selftest_helper_ctr_128): Renamed
+ prototypes from '<name>_128' to '<name>'.
+ * cipher/camellia-glue.c (selftest_ctr_128, selftest_cfb_128)
+ (selftest_ctr_128): Change to use new function names.
+ * cipher/rijndael.c (selftest_ctr_128, selftest_cfb_128)
+ (selftest_ctr_128): Change to use new function names.
+ * cipher/serpent.c (selftest_ctr_128, selftest_cfb_128)
+ (selftest_ctr_128): Change to use new function names.
+
+2013-05-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ serpent: add parallel processing for CFB decryption.
+ + commit 6deb0ccdf718a0670f80e6762a3842caf76437d6
+ * cipher/cipher.c (gcry_cipher_open): Add bulf CFB decryption function
+ for Serpent.
+ * cipher/serpent-sse2-amd64.S (_gcry_serpent_sse2_cfb_dec): New
+ function.
+ * cipher/serpent.c (_gcry_serpent_sse2_cfb_dec): New prototype.
+ (_gcry_serpent_cfb_dec) New function.
+ (selftest_cfb_128) New function.
+ (selftest) Call selftest_cfb_128.
+ * src/cipher.h (_gcry_serpent_cfb_dec): New prototype.
+
+ camellia: add parallel processing for CFB decryption.
+ + commit b60f06f70227c1e69e1010da8b47ea51ade48145
+ * cipher/camellia-aesni-avx-amd64.S
+ (_gcry_camellia_aesni_avx_cfb_dec): New function.
+ * cipher/camellia-glue.c (_gcry_camellia_aesni_avx_cfb_dec): New
+ prototype.
+ (_gcry_camellia_cfb_dec): New function.
+ (selftest_cfb_128): New function.
+ (selftest): Call selftest_cfb_128.
+ * cipher/cipher.c (gry_cipher_open): Add bulk CFB decryption function
+ for Camellia.
+ * src/cipher.h (_gcry_camellia_cfb_dec): New prototype.
+
+ rinjdael: add parallel processing for CFB decryption with AES-NI.
+ + commit 319ee14f2aab8db56a830fd7ac8926f91b4f738a
+ * cipher/cipher-selftest.c (_gcry_selftest_helper_cfb_128): New
+ function for CFB selftests.
+ * cipher/cipher-selftest.h (_gcry_selftest_helper_cfb_128): New
+ prototype.
+ * cipher/rijndael.c [USE_AESNI] (do_aesni_enc_vec4): New function.
+ (_gcry_aes_cfb_dec) [USE_AESNI]: Add parallelized CFB decryption.
+ (selftest_cfb_128): New function.
+ (selftest): Call selftest_cfb_128.
+
+2013-05-23 Werner Koch <wk@gnupg.org>
+
+ Avoid compiler warning due to the global symbol setkey.
+ + commit b402de8b9c4a9f269faf03ca952b1eb68a1f33c8
+ * cipher/cipher-selftest.c (_gcry_selftest_helper_cbc_128)
+ (_gcry_selftest_helper_ctr_128): Rename setkey to setkey_func.
+
+2013-05-23 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ serpent: add SSE2 accelerated amd64 implementation.
+ + commit 2fd06e207dcea1d8a7f0e7e92f3359615a99421b
+ * configure.ac (serpent): Add 'serpent-sse2-amd64.lo'.
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add
+ 'serpent-sse2-amd64.S'.
+ * cipher/cipher.c (gcry_cipher_open) [USE_SERPENT]: Register bulk
+ functions for CBC-decryption and CTR-mode.
+ * cipher/serpent.c (USE_SSE2): New macro.
+ [USE_SSE2] (_gcry_serpent_sse2_ctr_enc, _gcry_serpent_sse2_cbc_dec):
+ New prototypes to assembler functions.
+ (serpent_setkey): Set 'serpent_init_done' before calling serpent_test.
+ (_gcry_serpent_ctr_enc): New function.
+ (_gcry_serpent_cbc_dec): New function.
+ (selftest_ctr_128): New function.
+ (selftest_cbc_128): New function.
+ (selftest): Call selftest_ctr_128 and selftest_cbc_128.
+ * cipher/serpent-sse2-amd64.S: New file.
+ * src/cipher.h (_gcry_serpent_ctr_enc): New prototype.
+ (_gcry_serpent_cbc_dec): New prototype.
+
+ Serpent: faster S-box implementation.
+ + commit c85501af8222913f0a1e20e77fceb88e93417925
+ * cipher/serpent.c (SBOX0, SBOX1, SBOX2, SBOX3, SBOX4, SBOX5, SBOX6)
+ (SBOX7, SBOX0_INVERSE, SBOX1_INVERSE, SBOX2_INVERSE, SBOX3_INVERSE)
+ (SBOX4_INVERSE, SBOX5_INVERSE, SBOX6_INVERSE, SBOX7_INVERSE): Replace
+ with new definitions.
+
+2013-05-22 Werner Koch <wk@gnupg.org>
+
+ w32: Fix installing of .def file.
+ + commit 4e46d8bc78008ba06f106b368cefb0dddf15fe38
+ * src/Makefile.am (install-def-file): Create libdir first.
+
+ Add control commands to disable mlock and setuid dropping.
+ + commit 2b8014af202c9e0f7619f7a4377f5eb752235220
+ * src/gcrypt.h.in (GCRYCTL_DISABLE_LOCKED_SECMEM): New.
+ (GCRYCTL_DISABLE_PRIV_DROP): New.
+ * src/global.c (_gcry_vcontrol): Implement them.
+ * src/secmem.h (GCRY_SECMEM_FLAG_NO_MLOCK): New.
+ (GCRY_SECMEM_FLAG_NO_PRIV_DROP): New.
+ * src/secmem.c (no_mlock, no_priv_drop): New.
+ (_gcry_secmem_set_flags, _gcry_secmem_get_flags): Set and get them.
+ (lock_pool): Handle no_mlock and no_priv_drop.
+
+ Fix libtool 2.4.2 to correctly detect .def files.
+ + commit 05b3e2dda61d3d532a7f1ffd2487a85ed1c4f3ab
+ * ltmain.sh (sed_uncomment_deffile): New.
+ (orig_export_symbols): Uncomment def file before testing for EXPORTS.
+ * m4/libtool.m4: Do the same for the generated code.
+
+2013-05-22 Jussi Kivilinna <jussi.kivilinna@iki.fi>
+
+ Add AES bulk CBC decryption selftest.
+ + commit b65281a1b76d7898eb7607932246b78277d8570b
+ * cipher/rinjdael.c (selftest_cbc_128): New.
+ (selftest): Call selftest_cbc_128.
+
+ Change AES bulk CTR encryption selftest use new selftest helper function
+ + commit 3637bdbb5f30a5e06745d448a6a8ad00e5cdd740
+ * cipher/rinjdael.c: (selftest_ctr_128): Change to use new selftest
+ helper function.
+
+ Convert bulk CTR and CBC selftest functions in Camellia to generic selftest helper functions
+ + commit eed4042fa028b3f73bad6a768f5b0a82f642e545
+ * cipher/Makefile.am (libcipher_la_SOURCES): Add cipher-selftest files.
+ * cipher/camellia-glue.c (selftest_ctr_128, selftest_cbc_128): Change
+ to use the new selftest helper functions.
+ * cipher/cipher-selftest.c: New.
+ * cipher/cipher-selftest.h: New.
+
+ camellia: add bulk CBC decryption selftest.
+ + commit f2986f03d1ae59f973bae56ce4333e5457003de5
+ * cipher/camellia-glue.c: (selftest_cbc_128): New selftest function for
+ bulk CBC decryption.
+ (selftest): Add call to selftest_cbc_128.
+
+ camellia: Rename camellia_aesni_avx_x86-64.S to camellia-aesni-avx-amd64.S
+ + commit 194ae35da7830a76b96e9b21121a2e1248762d3f
+ * cipher/camellia_aesni_avx_x86-64.S: Remove.
+ * cipher/camellia-aesni-avx-amd64.S: New.
+ * cipher/Makefile.am: Use the new filename.
+ * configure.ac: Use the new filename.
+
+2013-05-21 Werner Koch <wk@gnupg.org>
+
+ Fix indentation and save on string space.
+ + commit 2ac3a7c2b7154379738d17cfde8cd9017dc142f0
+ * cipher/ecc.c (generate_key): Use the same string for both fatal
+ messages.
+
+2013-05-20 Andrey <andrey@brainhub.org>
+
+ cipher: Fix segv in last ECC change.
+ + commit eb4937914db3fb7317502e97e4f0e40c1857f59d
+ * cipher/ecc.c (generate_key): Make sure R is initialized.
+
+2013-05-09 Andrey <andrey@brainhub.org>
+
+ cipher: Generate compliant ECC keys.
+ + commit 296f38a2bd2e25788643a42e4881faed00884a40
+ * cipher/ecc.c (generate_key): Make sure a key is compliant for
+ using the compact representation.
+
+2013-04-18 Werner Koch <wk@gnupg.org>
+
+ cipher: Fix regression in Padlock support.
+ + commit 6c942ec4d63032539f1fc56c3b970cfec2369e2b
+ * cipher/rijndael.c (do_setkey): Remove dummy padlock key generation case
+ and use the standard one.
+
+ mpi: Yet another fix to get option flag munging right.
+ + commit 03557687a09b9c8878c77cbfdd0f5049940c72da
+ * cipher/Makefile.am (o_flag_munging): Yet another fix.
+
+ mpi: Make using gcc's -Ofast easier.
+ + commit 1ab26bc304c559b0a8d29823d656f7ad8d10a59d
+ * cipher/Makefile.am (o_flag_munging): Take -Ofast in account.
+
+ Fix alignment problem in idea.c.
+ + commit 3271b0dfda67e26c381d7ed667737f08f865ee40
+ * cipher/idea.c (cipher): Rework parameter use to fix alignment
+ problems.
+
+ * cipher/idea.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Remove unused macros.
+
+ Fix alignment problem in idea.c.
+
+ * cipher/idea.c (cipher): Rework parameter use to fix alignment
+ problems.
+
+ * cipher/idea.c (FNCCAST_SETKEY, FNCCAST_CRYPT): Remove unused macros.
+
+
+ (cherry picked from 4cd279556777e02eda79973f68efaa4b741f9175)
+
+2013-04-18 Vladimir Serbinenko <phcoder@gmail.com>
+
+ Add some const attributes.
+ + commit ff0b94c22b36600fff1db9f1d48f9de61f9038f7
+ * cipher/md4.c (transform): Add const attribute.
+ * cipher/md5.c (transform): Ditto.
+ * cipher/rmd160.c (transform): Ditto.
+
+ Fix alignment problem in serpent.c.
+ + commit 86e72b490a5790a9c23341067c7e4d3e38be1634
+ * cipher/serpent.c (serpent_key_prepare): Fix misaligned access.
+ (serpent_setkey): Likewise.
+ (serpent_encrypt_internal): Likewise.
+ (serpent_decrypt_internal): Likewise.
+ (serpent_encrypt): Don't put an alignment-increasing cast.
+ (serpent_decrypt): Likewise.
+ (serpent_test): Likewise.
+
+2013-04-16 Werner Koch <wk@wheatstone.g10code.de>
+
+ Fix multiply by zero in gcry_mpi_ec_mul.
+ + commit 78cd0ba8a8eceee9d0b3397a2ab3bda6ba37c8a4
+ * mpi/ec.c (_gcry_mpi_ec_mul_point): Handle case of SCALAR == 0.
+ * tests/t-mpi-point.c (basic_ec_math): Add a test case for this.
+
+2013-04-15 Werner Koch <wk@gnupg.org>
+
+ Add macros to return pre-defined MPIs.
+ + commit bd3afc27459a44df8cf501a7e1ae37bb849a8b0e
+ * src/gcrypt.h.in (GCRYMPI_CONST_ONE, GCRYMPI_CONST_TWO)
+ (GCRYMPI_CONST_THREE, GCRYMPI_CONST_FOUR, GCRYMPI_CONST_EIGHT): New.
+ (_gcry_mpi_get_const): New private function.
+ * src/visibility.c (_gcry_mpi_get_const): New.
+ * src/visibility.h: Mark it visible.
+
+ Fix addition of EC points.
+ + commit 71b25a5562f68aad81eae52cc1bab9ca7731a7e9
+ * mpi/ec.c (_gcry_mpi_ec_add_points): Fix case of P1 given in affine
+ coordinates.
+
+2013-04-12 Werner Koch <wk@gnupg.org>
+
+ Add hack to allow using an "ecc" key for "ecdsa" or "ecdh".
+ + commit af8a79aea80217a0c85a592db1fa001792a6bf0f
+ * cipher/pubkey.c (sexp_to_key): Add optional arg USE.
+ (gcry_pk_encrypt, gcry_pk_decrypt): Call sexp_to_key with usage sign.
+ (gcry_pk_sign, gcry_pk_verify): Call sexp_to_key with usage encrypt.
+ * tests/basic.c (show_sexp): New.
+ (check_pubkey_sign): Print test number and add cases for ecc.
+ (check_pubkey_sign_ecdsa): New.
+ (do_check_one_pubkey): Divert to new function.
+
+2013-04-11 Werner Koch <wk@gnupg.org>
+
+ Add gcry_pubkey_get_sexp.
+ + commit 1f3cfad66456dd6f2e48f20b8eb0c51343449a1c
+ * src/gcrypt.h.in (GCRY_PK_GET_PUBKEY): New.
+ (GCRY_PK_GET_SECKEY): New.
+ (gcry_pubkey_get_sexp): New.
+ * src/visibility.c (gcry_pubkey_get_sexp): New.
+ * src/visibility.h (gcry_pubkey_get_sexp): Mark visible.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add new function.
+ * cipher/pubkey-internal.h: New.
+ * cipher/Makefile.am (libcipher_la_SOURCES): Add new file.
+ * cipher/ecc.c: Include pubkey-internal.h
+ (_gcry_pk_ecc_get_sexp): New.
+ * cipher/pubkey.c: Include pubkey-internal.h and context.h.
+ (_gcry_pubkey_get_sexp): New.
+ * src/context.c (_gcry_ctx_find_pointer): New.
+ * src/cipher-proto.h: Add _gcry_pubkey_get_sexp.
+ * tests/t-mpi-point.c (print_sexp): New.
+ (context_param, basic_ec_math_simplified): Add tests for the new
+ function.
+
+ * configure.ac (NEED_GPG_ERROR_VERSION): Set to 1.11.
+ (AH_BOTTOM) Add error codes from gpg-error 1.12
+ * src/g10lib.h (fips_not_operational): Use GPG_ERR_NOT_OPERATIONAL.
+
+ * mpi/ec.c (_gcry_mpi_ec_get_mpi): Fix computation of Q.
+ (_gcry_mpi_ec_get_point): Ditto.
+
+ Remove unused code.
+ + commit 7524da2ba83d83a766c22d704006380c893e1c49
+ * cipher/pubkey.c (_gcry_pk_module_lookup, _gcry_pk_module_release)
+ (_gcry_pk_get_elements): Remove.
+
+2013-04-05 Werner Koch <wk@gnupg.org>
+
+ Make the Q parameter optional for ECC signing.
+ + commit fe91a642c7c257aca095b96406fbcace88fa3df4
+ * cipher/ecc.c (ecc_sign): Remove the need for Q.
+ * cipher/pubkey.c (sexp_elements_extract_ecc): Make Q optional for a
+ private key.
+ (sexp_to_key): Add optional arg R_IS_ECC.
+ (gcry_pk_sign): Do not call gcry_pk_get_nbits for ECC keys.
+ * tests/pubkey.c (die): Make sure to print a LF.
+ (check_ecc_sample_key): New.
+ (main): Call new test.
+
+ Add test case for SCRYPT and rework the code.
+ + commit f23a068bcb6ec9788710698578d8be0a2a006dbc
+ * tests/t-kdf.c (check_scrypt): New.
+ (main): Call new test.
+
+ * configure.ac: Support disabling of the scrypt algorithm. Make KDF
+ enabling similar to the other algorithm classes. Disable scrypt if we
+ don't have a 64 bit type.
+ * cipher/memxor.c, cipher/memxor.h: Remove.
+ * cipher/scrypt.h: Remove.
+ * cipher/kdf-internal.h: New.
+ * cipher/Makefile.am: Remove files. Add new file. Move scrypt.c to
+ EXTRA_libcipher_la_SOURCES.
+ (GCRYPT_MODULES): Add GCRYPT_KDFS.
+ * src/gcrypt.h.in (GCRY_KDF_SCRYPT): Change value.
+ * cipher/kdf.c (pkdf2): Rename to _gcry_kdf_pkdf2.
+ (_gcry_kdf_pkdf2): Don't bail out for SALTLEN==0.
+ (gcry_kdf_derive): Allow for a passwordlen of zero for scrypt. Check
+ for SALTLEN > 0 for GCRY_KDF_PBKDF2. Pass algo to _gcry_kdf_scrypt.
+ (gcry_kdf_derive) [!USE_SCRYPT]: Return an error.
+ * cipher/scrypt.c: Replace memxor.h by bufhelp.h. Replace scrypt.h by
+ kdf-internal.h. Enable code only if HAVE_U64_TYPEDEF is defined.
+ Replace C99 types uint64_t, uint32_t, and uint8_t by libgcrypt types.
+ (_SALSA20_INPUT_LENGTH): Remove underscore from identifier.
+ (_scryptBlockMix): Replace memxor by buf_xor.
+ (_gcry_kdf_scrypt): Use gcry_malloc and gcry_free. Check for integer
+ overflow. Add hack to support blocksize of 1 for tests. Return
+ errors from calls to _gcry_kdf_pkdf2.
+
+ * cipher/kdf.c (openpgp_s2k): Make static.
+
+2013-04-04 Christian Grothoff <christian@grothoff.org>
+
+ Add the SCRYPT KDF function.
+ + commit 855b1a8f81b5a3b5b31d0c3c303675425f58a5af
+ * scrypt.c, scrypt.h: New files.
+ * memxor.c, memxor.h: New files.
+ * cipher/Makefile.am: Add new files.
+ * cipher/kdf.c (gcry_kdf_derive): Support GCRY_KDF_SCRYPT.
+ * src/gcrypt.h.in (GCRY_KDF_SCRYPT): New.
+
+2013-03-22 Werner Koch <wk@gnupg.org>
+
+ Replace deprecated AM_CONFIG_HEADER macro.
+ + commit d0c8fda5af45354ac32928c9a01e688d6893599d
+ * configure.ac: s/AM_CONFIG_HEADER/AC_CONFIG_HEADER/
+
+ Disable AES-NI support if as does not support SSSE3.
+ + commit 9f4df1612ae21a5ce70d98930cb194e5193f5e2d
+ * configure.ac (HAVE_GCC_INLINE_ASM_SSSE3): New test.
+ (ENABLE_AESNI_SUPPORT): Do not define without SSSE3 support.
+ (HAVE_GCC_INLINE_ASM_SSSE3, ENABLE_AVX_SUPPORT): Split up detection
+ and definition.
+
+2013-03-21 Werner Koch <wk@gnupg.org>
+
+ Fix make dependency regression.
+ + commit 2a1e03c5a481689c43d197dd8034a1d73de0a1a4
+ * src/Makefile.am (libgcrypt_la_DEPENDENCIES): Add missing backslash.
+ Reported by LRN.
+
+2013-03-20 Werner Koch <wk@gnupg.org>
+
+ Use finer grained on-the-fly helper computations for EC.
+ + commit 5fb3501aa0cf5f2b2a9012706bb9ad2b1c4bfd7d
+ * src/ec-context.h (mpi_ec_ctx_s): Replace NEED_SYNC by a bitfield.
+ * mpi/ec.c (ec_p_sync): Remove.
+ (ec_get_reset, ec_get_a_is_pminus3, ec_get_two_inv_p): New.
+ (ec_p_init): Use ec_get_reset.
+ (_gcry_mpi_ec_set_mpi, _gcry_mpi_ec_dup_point)
+ (_gcry_mpi_ec_add_points): Replace ec_p_sync by the ec_get_ accessors.
+
+ Allow building with w64-mingw32.
+ + commit b402e550041782b770a6ae267c7c28ca8324a12e
+ * autogen.sh <--build-w32>: Support the w64-mingw32 toolchain. Also
+ prepare for 64 bit building.
+
+ Provide GCRYPT_VERSION_NUMBER macro, add build info to the binary.
+ + commit 1eaad0a8c4cab227685a6a8768e539df2f1f4dac
+ * src/gcrypt.h.in (GCRYPT_VERSION_NUMBER): New.
+ * configure.ac (VERSION_NUMBER): New ac_subst.
+ * src/global.c (_gcry_vcontrol): Move call to above function ...
+ (gcry_check_version): .. here.
+
+ * configure.ac (BUILD_REVISION, BUILD_FILEVERSION)
+ (BUILD_TIMESTAMP): Define on all platforms.
+ * compat/compat.c (_gcry_compat_identification): Include revision and
+ timestamp.
+
+ Fix a memory leak in the new EC code.
+ + commit de07974d807b703a2554d6ba885ea249e648bd44
+ * cipher/ecc.c (point_from_keyparam): Always call mpi_free on A.
+
+2013-03-19 Werner Koch <wk@gnupg.org>
+
+ Extend the new EC interface and fix two bugs.
+ + commit 931e409e877d1e444edd53dead327ec8e64daf9a
+ * src/ec-context.h (mpi_ec_ctx_s): Add field NEED_SYNC.
+ * mpi/ec.c (ec_p_sync): New.
+ (ec_p_init): Only set NEED_SYNC.
+ (_gcry_mpi_ec_set_mpi): Set NEED_SYNC for 'p' and 'a'.
+ (_gcry_mpi_ec_dup_point, _gcry_mpi_ec_add_points)
+ (_gcry_mpi_ec_mul_point): Call ec_p_sync.
+ (_gcry_mpi_ec_get_point): Recompute 'q' is needed.
+ (_gcry_mpi_ec_get_mpi): Ditto. Also allow for names 'q', 'q.x',
+ 'q.y', and 'g'.
+ * cipher/ecc.c (_gcry_mpi_ec_ec2os): New.
+
+ * cipher/ecc.c (_gcry_mpi_ec_new): Fix init from parameters 'Q'->'q',
+ 'G'->'q'.
+
+2013-03-15 Werner Koch <wk@gnupg.org>
+
+ mpi: Add functions to manipulate an EC context.
+ + commit 229f3219f80c9369ed9624242c0436ae6d293201
+ * src/gcrypt.h.in (gcry_mpi_ec_p_new): Remove.
+ (gcry_mpi_ec_new): New.
+ (gcry_mpi_ec_get_mpi): New.
+ (gcry_mpi_ec_get_point): New.
+ (gcry_mpi_ec_set_mpi): New.
+ (gcry_mpi_ec_set_point): New.
+ * src/visibility.c (gcry_mpi_ec_p_new): Remove.
+ * mpi/ec.c (_gcry_mpi_ec_p_new): Make it an internal function and
+ change to return an error code.
+ (_gcry_mpi_ec_get_mpi): New.
+ (_gcry_mpi_ec_get_point): New.
+ (_gcry_mpi_ec_set_mpi): New.
+ (_gcry_mpi_ec_set_point): New.
+ * src/mpi.h: Add new prototypes.
+ * src/ec-context.h: New.
+ * mpi/ec.c: Include that header.
+ (mpi_ec_ctx_s): Move to ec-context.h, add new fields, and put some
+ fields into an inner struct.
+ (point_copy): New.
+ * cipher/ecc.c (fill_in_curve): Allow passing NULL for R_NBITS.
+ (mpi_from_keyparam, point_from_keyparam): New.
+ (_gcry_mpi_ec_new): New.
+
+ * tests/t-mpi-point.c (test-curve): New.
+ (ec_p_new): New. Use it instead of the removed gcry_mpi_ec_p_new.
+ (get_and_cmp_mpi, get_and_cmp_point): New.
+ (context_param): New test.
+ (basic_ec_math_simplified): New test.
+ (main): Call new tests.
+
+ * src/context.c (_gcry_ctx_get_pointer): Check for a NULL CTX.
+
+2013-03-13 Werner Koch <wk@gnupg.org>
+
+ Add GCRYMPI_FLAG_CONST and make use constants.
+ + commit e005629bd7bebb3e13945645c6e1230b44ab16a2
+ * src/gcrypt.h.in (GCRYMPI_FLAG_CONST): New.
+ * src/mpi.h (mpi_is_const, mpi_const): New.
+ (enum gcry_mpi_constants, MPI_NUMBER_OF_CONSTANTS): New.
+ * mpi/mpiutil.c (_gcry_mpi_init): New.
+ (constants): New.
+ (_gcry_mpi_free): Do not release a constant flagged MPI.
+ (gcry_mpi_copy): Clear the const and immutable flags.
+ (gcry_mpi_set_flag, gcry_mpi_clear_flag, gcry_mpi_get_flag): Support
+ GCRYMPI_FLAG_CONST.
+ (_gcry_mpi_const): New.
+ * src/global.c (global_init): Call _gcry_mpi_init.
+ * mpi/ec.c (mpi_ec_ctx_s): Remove fields one, two, three, four, and
+ eight. Change all users to call mpi_const() instead.
+
+ * src/mpiutils.c (gcry_mpi_set_opaque): Check the immutable flag.
+
+ Add GCRYMPI_FLAG_IMMUTABLE to help debugging.
+ + commit 1fecae98ee7e0fa49b29f98efa6817ca121ed98a
+ * src/gcrypt.h.in (GCRYMPI_FLAG_IMMUTABLE): New.
+ * src/mpi.h (mpi_is_immutable): New macro.
+ * mpi/mpiutil.c (gcry_mpi_set_flag, gcry_mpi_clear_flag)
+ (gcry_mpi_get_flag): Implement new flag
+ (_gcry_mpi_immutable_failed): New.
+
+ * mpi/mpiutil.c (_gcry_mpi_clear, _gcry_mpi_free, gcry_mpi_snatch)
+ (gcry_mpi_set, gcry_mpi_randomize): Act upon the immutable flag.
+ * mpi/mpi-bit.c (gcry_mpi_set_bit, gcry_mpi_set_highbit)
+ (gcry_mpi_clear_highbit, gcry_mpi_clear_bit)
+ (_gcry_mpi_rshift_limbs, gcry_mpi_lshift): Ditto.
+ * mpi/mpicoder.c (_gcry_mpi_set_buffer): Ditto.
+
+2013-03-08 Werner Koch <wk@gnupg.org>
+
+ mpi: Add an API for EC math.
+ + commit 8ac9e756d3ca545a9b97e61ad3d42fc2e877d788
+ * src/context.c, src/context.h: New.
+ * src/Makefile.am (libgcrypt_la_SOURCES): Add new files.
+ * src/gcrypt.h.in (struct gcry_context, gcry_ctx_t): New types.
+ (gcry_ctx_release): New prototype.
+ (gcry_mpi_ec_p_new, gcry_mpi_ec_get_affine, gcry_mpi_ec_dup)
+ (gcry_mpi_ec_add, gcry_mpi_ec_mul): New prototypes.
+ * mpi/ec.c: Include errno.h and context.h.
+ (_gcry_mpi_ec_init): Rename to ..
+ (ec_p_init): this, make static, remove allocation and add arg CTX.
+ (_gcry_mpi_ec_p_internal_new): New; to replace _gcry_mpi_ec_init.
+ Change all callers to use this func.
+ (_gcry_mpi_ec_free): Factor code out to ..
+ (ec_deinit): New func.
+ (gcry_mpi_ec_p_new): New.
+ * src/visibility.c: Include context.h and mpi.h.
+ (gcry_mpi_ec_p_new, gcry_mpi_ec_get_affine, gcry_mpi_ec_dup)
+ (gcry_mpi_ec_add, gcry_mpi_ec_mul)
+ (gcry_ctx_release): New wrapper functions.
+ * src/visibility.h: Mark new wrapper functions visible.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add new symbols.
+ * tests/t-mpi-point.c (print_mpi, hex2mpi, cmp_mpihex): New.
+ (context_alloc): New.
+ (make_point, basic_ec_math): New.
+
+ mpi: Add an API for EC point operations.
+ + commit 7cce620acddac2df024ca421ed3abc32a88f3738
+ * mpi/ec.c (gcry_mpi_point_new, gcry_mpi_point_release): New.
+ (gcry_mpi_point_get, gcry_mpi_point_snatch_get): New.
+ (gcry_mpi_point_set, gcry_mpi_point_snatch_set): New.
+ * src/visibility.h, src/visibility.c: Add corresponding macros and
+ wrappers.
+ * src/gcrypt.h.in (struct gcry_mpi_point, gcry_mpi_point_t): New.
+ (gcry_mpi_point_new, gcry_mpi_point_release, gcry_mpi_point_get)
+ (gcry_mpi_point_snatch_get, gcry_mpi_point_set)
+ (gcry_mpi_point_snatch_set): New prototypes.
+ (mpi_point_new, mpi_point_release, mpi_point_get, mpi_point_snatch_get)
+ (mpi_point_set, mpi_point_snatch_set): New macros.
+ * src/libgcrypt.vers (gcry_mpi_point_new, gcry_mpi_point_release)
+ (gcry_mpi_point_get, gcry_mpi_point_snatch_get, gcry_mpi_point_set)
+ (gcry_mpi_point_snatch_set): New symbols.
+ * src/libgcrypt.def: Ditto.
+ * tests/t-mpi-point.c: New.
+ * tests/Makefile.am (TESTS): Add t-mpi-point
+
+2013-03-07 Werner Koch <wk@gnupg.org>
+
+ mpi: Add mpi_snatch and change an internal typedef.
+ + commit 6c4767637c512127a4362732b3ec51068554d328
+ * src/mpi.h (struct mpi_point_s): Rename to struct gcry_mpi_point.
+ (mpi_point_struct): New typedef.
+ (mpi_point_t): Change typedef to a pointer. Replace all occurrences
+ to use mpi_point_struct.
+ * mpi/ec.c (_gcry_mpi_ec_point_init): Rename to ..
+ (_gcry_mpi_point_init): this. Change all callers.
+ (_gcry_mpi_ec_point_free): Rename to ..
+ (_gcry_mpi_point_free_parts): this. Change all callers.
+
+ * mpi/mpiutil.c (gcry_mpi_snatch): New function.
+ * src/gcrypt.h.in (gcry_mpi_snatch, mpi_snatch): Add protoype and
+ macro.
+ * src/visibility.c (gcry_mpi_snatch): Add wrapper.
+ * src/visibility.h (gcry_mpi_snatch): Add macro magic.
+ * src/libgcrypt.def, src/libgcrypt.vers: Add new function.
+
+ Pretty print the configure feedback.
+ + commit c620099e4ab2f35e0196b395a805bb655c984ac2
+ * acinclude.m4 (GNUPG_MSG_PRINT): Remove.
+ (GCRY_MSG_SHOW, GCRY_MSG_WRAP): New.
+ * configure.ac: Use new macros for the feedback.
+
+2013-02-20 Werner Koch <wk@gnupg.org>
+
+ Fix building of hwf-x86.c.
+ + commit 70dcac663de06b012417015c175973d64e6980df
+ * src/Makefile.am (AM_CFLAGS): Set to GPG_ERROR_CFLAGS
+ (AM_CCASFLAGS): Set NOEXECSTACK_FLAGS.
+
+ Remove build hacks for FreeBSD.
+ + commit fb48ebf7081400a24ee48f8a9894a361e8834b6e
+ * configure.ac [freebsd]: Do not add /usr/local to CPPFLAGS and
+ LDFLAGS.
+
+2013-02-19 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Rinjdael: Fix use of SSE2 outside USE_AESNI/ctx->use_aesni.
+ + commit 0da77955a097bfd2469ad084b3e9fcac4fb1e3fa
+ * cipher/rijndael.c (_gcry_aes_cbc_enc): Check if AES-NI is enabled before
+ calling aesni_prepare() and aesni_cleanup().
+
+ Add AES-NI/AVX accelerated Camellia implementation.
+ + commit 63ac3ba07dba82fde040d31b90b4eff627bd92b9
+ * configure.ac: Add option --disable-avx-support.
+ (HAVE_GCC_INLINE_ASM_AVX): New.
+ (ENABLE_AVX_SUPPORT): New.
+ (camellia) [ENABLE_AVX_SUPPORT, ENABLE_AESNI_SUPPORT]: Add
+ camellia_aesni_avx_x86-64.lo.
+ * cipher/Makefile.am (AM_CCASFLAGS): Add.
+ (EXTRA_libcipher_la_SOURCES): Add camellia_aesni_avx_x86-64.S
+ * cipher/camellia-glue.c [ENABLE_AESNI_SUPPORT, ENABLE_AVX_SUPPORT]
+ [__x86_64__] (USE_AESNI_AVX): Add macro.
+ (struct Camellia_context) [USE_AESNI_AVX]: Add use_aesni_avx.
+ [USE_AESNI_AVX] (_gcry_camellia_aesni_avx_ctr_enc)
+ (_gcry_camellia_aesni_avx_cbc_dec): New prototypes to assembly
+ functions.
+ (camellia_setkey) [USE_AESNI_AVX]: Enable AES-NI/AVX if hardware
+ support both.
+ (_gcry_camellia_ctr_enc) [USE_AESNI_AVX]: Add AES-NI/AVX code.
+ (_gcry_camellia_cbc_dec) [USE_AESNI_AVX]: Add AES-NI/AVX code.
+ * cipher/camellia_aesni_avx_x86-64.S: New.
+ * src/g10lib.h (HWF_INTEL_AVX): New.
+ * src/global.c (hwflist): Add HWF_INTEL_AVX.
+ * src/hwf-x86.c (detect_x86_gnuc) [ENABLE_AVX_SUPPORT]: Add detection
+ for AVX.
+
+ camellia.c: Prepare for AES-NI/AVX implementation.
+ + commit 4de62d80644228fc5db2a9f9c94a7eb633d8de2e
+ * cipher/camellia-glue.c (CAMELLIA_encrypt_stack_burn_size)
+ (CAMELLIA_decrypt_stack_burn_size): Increase stack burn size.
+ * cipher/camellia.c (CAMELLIA_ROUNDSM): Move key-material mixing in
+ the front.
+ (camellia_setup128, camellia_setup256): Remove now unneeded
+ key-material mangling.
+ (camellia_encrypt128, camellia_decrypt128, amellia_encrypt256)
+ (camellia_decrypt256): Copy block to stack, so that compiler can
+ optimize it for register usage.
+
+ Camellia, prepare glue code for AES-NI/AVX implementation.
+ + commit 537f12ce072d568f9fa344c447d32b2e0efffbe8
+ * cipher/camellia-glue.c (ATTR_ALIGNED_16): Add macro.
+ (CAMELLIA_encrypt_stack_burn_size): Add macro.
+ (camellia_encrypt): Use macro above for stack burn size.
+ (CAMELLIA_decrypt_stack_burn_size): Add macro.
+ (camellia_decrypt): Use macro above for stack burn size.
+ (_gcry_camellia_ctr_enc): New function.
+ (_gcry_camellia_cbc_dec): New function.
+ (selftest_ctr_128): New function.
+ (selftest): Call function above.
+ * cipher/cipher.c (gcry_cipher_open) [USE_CAMELLIA]: Register bulk
+ functions for CBC-decryption and CTR-mode.
+ * src/cipher.h (_gcry_camellia_ctr_enc): New prototype.
+ (_gcry_camellia_cbc_dec): New prototype.
+
+2012-12-21 Werner Koch <wk@gnupg.org>
+
+ Prepare for hardware feature detection on other platforms.
+ + commit 09ac5d87d11aa0b1fa0e0a4184ab03b3671a73e2
+ * configure.ac (GCRYPT_HWF_MODULES): New.
+ (HAVE_CPU_ARCH_X86, HAVE_CPU_ARCH_ALPHA, HAVE_CPU_ARCH_SPARC)
+ (HAVE_CPU_ARCH_MIPS, HAVE_CPU_ARCH_M68K, HAVE_CPU_ARCH_PPC)
+ (HAVE_CPU_ARCH_ARM): New AC_DEFINEs.
+ * mpi/config.links (mpi_cpu_arch): New.
+ * src/global.c (print_config): Print new tag "cpu-arch".
+ * src/Makefile.am (libgcrypt_la_SOURCES): Add hwf-common.h
+ (EXTRA_libgcrypt_la_SOURCES): New.
+ (gcrypt_hwf_modules): New.
+ (libgcrypt_la_DEPENDENCIES, libgcrypt_la_LIBADD): Add that one.
+ * src/hwfeatures.c: Factor most code out to ...
+ * src/hwf-x86.c: New file.
+ (detect_x86_gnuc): Return the feature vector.
+ (_gcry_hwf_detect_x86): New.
+ * src/hwf-common.h: New.
+ * src/hwfeatures.c (_gcry_detect_hw_features): Dispatch using
+ HAVE_CPU_ARCH_ macros.
+
+2012-12-21 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Clean up i386/x86-64 cpuid usage in hwfeatures.c.
+ + commit d842eea55e22c05da3959a7a4422b5fcd7884f60
+ * src/hwfeatures.c [__i386__ && __GNUC__] (detect_ia32_gnuc): Remove.
+ [__x86_64__ && __GNUC__] (detect_x86_64_gnuc): Remove.
+ [__i386__ && __GNUC__] (is_cpuid_available, get_cpuid)
+ (HAS_X86_CPUID): New.
+ [__x86_64__ && __GNUC__] (is_cpuid_available, get_cpuid)
+ (HAS_X86_CPUID): New.
+ [HAS_X86_CPUID] (detect_x86_gnuc): New.
+ (_gcry_detect_hw_features) [__i386__ && GNUC]: Remove detect_ia32_gnuc
+ call.
+ (_gcry_detect_hw_features) [__x86_64__ && GNUC]: Remove
+ detect_x86_64_gnuc call.
+ (_gcry_detect_hw_features) [HAS_X86_CPUID]: Add detect_x86_gnuc call.
+
+2012-12-18 Dmitry Kasatkin <dmitry.kasatkin@intel.com>
+
+ Add support for using DRNG random number generator.
+ + commit efd7002188e6d50013e4d9a920a8b9afa9d210e5
+ * configure.ac: Add option --disable-drng-support.
+ (ENABLE_DRNG_SUPPORT): New.
+ * random/rndhw.c (USE_DRNG): New.
+ (rdrand_long, rdrand_nlong, poll_drng): New.
+ (_gcry_rndhw_poll_fast, _gcry_rndhw_poll_slow): Call poll function.
+ * src/g10lib.h (HWF_INTEL_RDRAND): New.
+ * src/global.c (hwflist): Add "intel-rdrand".
+ * src/hwfeatures.c (detect_x86_64_gnuc) [ENABLE_DRNG_SUPPORT]: Detect
+ RDRAND.
+ (detect_ia32_gnuc) [ENABLE_DRNG_SUPPORT]: Detect RDRAND.
+
+2012-12-03 Werner Koch <wk@gnupg.org>
+
+ random: Add a RNG selection interface and system RNG wrapper.
+ + commit 7607ab81504ce44060ed0b331d309606f5da1e75
+ * random/random-system.c: New.
+ * random/Makefile.am (librandom_la_SOURCES): Add new module.
+ * random/random.c (struct rng_types): New.
+ (_gcry_set_preferred_rng_type, _gcry_get_rng_type): New.
+ (_gcry_random_initialize, gcry_random_add_bytes, do_randomize)
+ (_gcry_set_random_seed_file, _gcry_update_random_seed_file)
+ (_gcry_fast_random_poll): Dispatch to the actual RNG.
+ * src/gcrypt.h.in (GCRYCTL_SET_PREFERRED_RNG_TYPE): New.
+ GCRYCTL_GET_CURRENT_RNG_TYPE): New.
+ (gcry_rng_types): New.
+ * src/global.c (print_config): Print the TNG type.
+ (global_init, _gcry_vcontrol): Implement the new control codes.
+ * doc/gcrypt.texi (Controlling the library): Document the new control
+ codes.
+
+ * tests/benchmark.c (main): Add options to test the RNG types.
+ * tests/random.c (main): Add new options.
+ (print_hex): Print to stderr.
+ (progress_cb, rng_type): New.
+ (check_rng_type_switching, check_early_rng_type_switching): New.
+ (run_all_rng_tests): New.
+
+ tests: Allow use of random.c under Windows.
+ + commit 76c622e24a07f7c826812be173aa173b4334776b
+ * tests/Makefile.am (TESTS): Always include random.c
+ * tests/random.c [!W32]: Include sys/wait.h.
+ (inf): New.
+ (check_forking, check_nonce_forking): Print a notice what will be done.
+ (main) [W32]: Do not call signal.
+
+ Make random-fips.c work multi-threaded.
+ + commit 75760021b511ba438606af746431223357e7a155
+ * random/random-fips.c (basic_initialization): Fix reversed logic.
+
+ Move nonce creation from csprng backend to random main module.
+ + commit c324644aa14e54fc7051983b38222db32b8ab227
+ * random/random-csprng.c (_gcry_rngcsprng_create_nonce): Remove.
+ (nonce_buffer_lock): Remove.
+ (initialize_basics): Remove init of nonce_buffer_lock.
+ * random/random.c: Add a few header files.
+ (nonce_buffer_lock): New.
+ (_gcry_random_initialize): Init nonce_buffer_lock.
+ (gcry_create_nonce): Add code from _gcry_rngcsprng_create_nonce.
+
+ * random/random-daemon.c (_gcry_daemon_create_nonce): Remove.
+
+2012-12-03 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Fix building with CC="gcc -std=c90".
+ + commit f851b9a932ee64fa5a06000d1ac763ba4349f07d
+ * configure.ac: Add check for missing 'asm' keyword in C90 mode and
+ replacement with '__asm__'.
+
+2012-12-03 Werner Koch <wk@gnupg.org>
+
+ Try to use inttypes.h if stdint.h is not available.
+ + commit d9ec7aec1301b13a89e5c9c54d7ad52e1a29b846
+ * cipher/bufhelp.h [HAVE_INTTYPES_H]: Include inttypes.h
+
+2012-12-03 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Optimize buffer xoring.
+ + commit 162791bc08f4fc9b3882671e68ecdfd9e130ae59
+ * cipher/Makefile.am (libcipher_la_SOURCES): Add 'bufhelp.h'.
+ * cipher/bufhelp.h: New.
+ * cipher/cipher-aeswrap.c (_gcry_cipher_aeswrap_encrypt)
+ (_gcry_cipher_aeswrap_decrypt): Use 'buf_xor' for buffer xoring.
+ * cipher/cipher-cbc.c (_gcry_cipher_cbc_encrypt)
+ (_gcry_cipher_cbc_decrypt): Use 'buf_xor' for buffer xoring and remove
+ resulting unused variables.
+ * cipher/cipher-cfb.c (_gcry_cipher_cfb_encrypt) Use 'buf_xor_2dst'
+ for buffer xoring and remove resulting unused variables.
+ (_gcry_cipher_cfb_decrypt): Use 'buf_xor_n_copy' for buffer xoring and
+ remove resulting unused variables.
+ * cipher/cipher-ctr.c (_gcry_cipher_ctr_encrypt): Use 'buf_xor' for
+ buffer xoring and remove resulting unused variables.
+ * cipher/cipher-ofb.c (_gcry_cipher_ofb_encrypt)
+ (_gcry_cipher_ofb_decrypt): Use 'buf_xor' for buffer xoring and remove
+ resulting used variables.
+ * cipher/rijndael.c (_gry_aes_cfb_enc): Use 'buf_xor_2dst' for buffer
+ xoring and remove resulting unused variables.
+ (_gry_aes_cfb_dev): Use 'buf_xor_n_copy' for buffer xoring and remove
+ resulting unused variables.
+ (_gry_aes_cbc_enc, _gry_aes_ctr_enc, _gry_aes_cbc_dec): Use 'buf_xor'
+ for buffer xoring and remove resulting unused variables.
+
+2012-11-29 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Optimize AES-NI CTR mode.
+ + commit 9ee9e25f519696d509b1a5c1cc04ab0121e98a51
+ * cipher/rijndael.c [USE_AESNI] (do_aesni_ctr, do_aesni_ctr_4): Make
+ handling of 64-bit overflow and carry conditional. Avoid generic to
+ vector register passing of value '1'. Generate and use '-1' instead.
+
+2012-11-28 Werner Koch <wk@gnupg.org>
+
+ Make a cpp conditional in rijndael.c better readable.
+ + commit 6765e0a8618000d3dc7bda035163e0708c43791b
+ * cipher/rijndael.c (USE_AESNI): Modify cpp conditionals for better
+ readability.
+
+2012-11-28 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Fix building with Clang on x86-64 and i386.
+ + commit 99e272d938fe23efec25af409bdb91dae0e659e5
+ * cipher/rijndael.c [USE_AESNI] (do_aesni_enc_aligned)
+ (do_aesni_dec_vec4, do_aesni_cfb, do_aesni_ctr, do_aesni_ctr_4): Add
+ explicit suffix to 'cmp' instructions.
+
+2012-11-26 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Optimize wipememory2 for i386 and x86-64.
+ + commit faec12e23f03c7cd1614594bfdd51f1302cadb42
+ * src/g10lib.h (wipememory2): Add call to fast_wipememory2.
+ (fast_wipememory2): New macros for i386 and x86-64 architectures.
+ Empty macro provided for other architectures.
+
+ Fix missing 64bit carry handling in AES-NI CTR mode.
+ + commit fc37e805c6394c2e635d1a033670be961f36a6d2
+ * cipher/rijndael.c [USE_AESNI] (do_aesni_ctr, do_aesni_ctr_4): Add
+ carry handling to 64-bit addition.
+ (selftest_ctr_128): New function for testing IV handling in bulk CTR
+ function.
+ (selftest): Add call to selftest_ctr_128.
+
+ Add parallelized AES-NI CBC decryption.
+ + commit 35aff0cd43885b5f5c076432ec614698abeb63d8
+ * cipher/rijndael.c [USE_AESNI] (aesni_cleanup_5): New macro.
+ [USE_AESNI] (do_aesni_dec_vec4): New function.
+ (_gcry_aes_cbc_dec) [USE_AESNI]: Add parallelized CBC loop.
+ (_gcry_aes_cbc_dec) [USE_AESNI]: Change IV storage register from xmm3
+ to xmm5.
+
+ Clear xmm5 after use in AES-NI CTR mode.
+ + commit 5acd0e5ae2a58dda51c2b56c879b80a1a6d2c42f
+ * cipher/rijndael.c [USE_AESNI]: Rename aesni_cleanup_2_4 to
+ aesni_cleanup_2_5.
+ [USE_AESNI] (aesni_cleanup_2_5): Clear xmm5 register.
+ (_gcry_aes_ctr_enc, _gcry_aes_cbc_dec) [USE_AESNI]: Use
+ aesni_cleanup_2_5 instead of aesni_cleanup_2_4.
+
+ Optimize AES-NI CBC encryption.
+ + commit be3768994ad362dfc849a8cd0146b4c9bb287d20
+ * cipher/rijndeal.c (_gcry_aes_cbc_enc) [USE_AESNI]: Add AES-NI
+ spesific loop and use SSE2 assembler for xoring and copying of
+ blocks.
+
+ Improve parallelizability of CBC decryption for AES-NI.
+ + commit 3369d960158ab4231b83926a0f982e2a8819f173
+ * cipher/rijndael.c (_gcry_aes_cbc_dec) [USE_AESNI]: Add AES-NI
+ specific CBC mode loop with temporary block and IV stored in free SSE
+ registers.
+
+ Extend test of chained modes for 128bit ciphers.
+ + commit 55b96be08531664ed3f4230acebe0f45954bbc33
+ * tests/basic.c (check_one_cipher_core, check_one_cipher): Increase
+ input and output buffer sizes from 16 bytes to 1024+16=1040 bytes.
+ (check_one_cipher_core): Add asserts to verify sizes of temporary
+ buffers.
+
+2012-11-21 Werner Koch <wk@gnupg.org>
+
+ Fix for strict aliasing rules.
+ + commit dfb4673da8ee52d95e0a62c9f49ca8599943f22e
+ * cipher/rijndael.c (do_setkey, prepare_decryption): Use u32_a_t for
+ casting.
+
+ Do not detect AES-NI support if disabled by configure.
+ + commit 3047795794eb238aa684bd0729acf64c82a19e09
+ * src/hwfeatures.c (detect_ia32_gnuc): Detect AESNI support only if
+ that support has been enabled.
+
+2012-11-21 Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
+
+ Fix too large burn_stack in camellia-glue.c.
+ + commit 8afabc2813948778a3db52d9dee9a041a3dd50d4
+ * cipher/camellia-glue.c (camellia_encrypt, camellia_decrypt): Do not
+ take full array size of KEY_TABLE_TYPE, but argument size instead.
+
+ Add x86_64 support for AES-NI.
+ + commit d8bdfa42ed582655c180e7db9b16d4e756a12a6e
+ * cipher/rijndael.c [ENABLE_AESNI_SUPPORT]: Enable USE_AESNI on x86-64.
+ (do_setkey) [USE_AESNI_is_disabled_here]: Use %[key] and %[ksch]
+ directly as registers instead of using temporary register %%esi.
+ [USE_AESNI] (do_aesni_enc_aligned, do_aesni_dec_aligned, do_aesni_cfb,
+ do_aesni_ctr, do_aesni_ctr_4): Use %[key] directly as register instead
+ of using temporary register %%esi.
+ [USE_AESNI] (do_aesni_cfb, do_aesni_ctr, do_aesni_ctr_4): Change %[key]
+ from generic "g" type to register "r".
+ * src/hwfeatures.c (_gcry_detect_hw_features) [__x86_64__]: Do not
+ clear AES-NI feature flag.
+
+ Fix cpuid vendor-id check for i386 and x86-64.
+ + commit 9e1552517f68459a165ddebbba85e7cf37ff4f0c
+ * src/hwfeatures.c (detect_x86_64_gnuc, detect_ia32_gnuc): Allow
+ Intel features be detect from CPU by other vendors too.
+
+ Fix hwdetect assembler clobbers.
+ + commit 19b9efd1f47a5de9c450ce8212dfa3174a029c7a
+ * src/hwfeatures.c (detect_x86_64_gnuc): Add missing %ebx assembler
+ clobbers.
+ (detect_x86_64_gnuc, detect_ia32_gnuc) [ENABLE_PADLOCK_SUPPORT]: Add
+ missing %ecx assembler clobbers.
+
+2012-11-21 Werner Koch <wk@gnupg.org>
+
+ Use configure test for aligned attribute.
+ + commit 6368ed542150956ff4ba8170a15bbc534143675c
+ * configure.ac (HAVE_GCC_ATTRIBUTE_ALIGNED): New test and ac_define.
+ * cipher/cipher-internal.h, cipher/rijndael.c, random/rndhw.c: Use new
+ macro instead of a fixed test for __GNUC__.
+
+ Fix segv with AES-NI on some platforms.
+ + commit a96974de734beb51a733a89b3283bcf7b433b54c
+ * cipher/rijndael.c (RIJNDAEL_context): Align on 16 bytes.
+
+2012-11-16 Werner Koch <wk@gnupg.org>
+
+ Improve parsing of the GIT revision number.
+ + commit 4b18e530f417d4af401a3fd721ad2a07e5310e3e
+ * configure.ac (mmm4_revision): Use git rev-parse.
+
+2012-11-08 Werner Koch <wk@gnupg.org>
+
+ Fix extern inline use for gcc > 4.3 in c99 mode.
+ + commit 5abc06114e91beca0177331e1c79815f5fb6d7be
+ * mpi/mpi-inline.h [!G10_MPI_INLINE_DECL]: Take care of changed extern
+ inline semantics in gcc.
+
+2012-11-07 Werner Koch <wk@gnupg.org>
+
+ Fix memory leak in gcry_pk_testkey for ECC.
+ + commit 8cbbad5f94f6e0429fffe66d689aea20f7e35957
+ * cipher/ecc.c (check_secret_key): Restructure for easier allocation
+ tracking. Fix memory leak.
+
+2012-11-05 Werner Koch <wk@gnupg.org>
+
+ Prepare for a backported interface in 1.5.1.
+ + commit 7af98ef78d45e813f47ae4e180a02757a379953f
+ * configure.ac: Bump LT version at C20/A0/R0 to adjust for a planned
+ API update in 1.5.1.
+
+ Adjust for stricter autoconf requirements.
+ + commit 1241fbbc896e9bbad68f1007a17b20493f6cd1af
+ * configure.ac: Fix usage of AC_LANG_PROGRAM.
+
+ Update build helper scripts.
+ + commit a5c4d45e8d12737cd21b095c81da5c18e2afc39e
+ * config.guess, config.sub: Update to version 2012-07-31.
+ * ltmain.sh: Update to version 2.4.2.
+ * install-sh, m4/libtool.m4, m4/ltoptions.m4, m4/ltversion.m4
+ * m4/lt~obsolete.m4: Update to autoconf 2.69 versions.
+
+ Do not distribute a copy of gitlog-to-changelog.
+ + commit 40976d7da5420453bf93a9c99f0cc4c7044d0774
+ * Makefile.am (GITLOG_TO_CHANGELOG): New.
+ (gen-ChangeLog): Require an installed gitlog-to-changelog.
+ * scripts/gitlog-to-changelog: Remove.
+
+ * README.SVN: Remove.
+ * REMOVE.GIT: New.
+
+ Allow building with w64-mingw32.
+ + commit 4f6fb150558d0ed250bfbd50352c258a4456ba50
+ * autogen.sh <--build-w32>: Support the w64-mingw32 toolchain. Also
+ prepare for 64 bit building.
+ <git-setup>: Remove option -c from chmod.
+
+ Switch to the new automagic beta numbering scheme.
+ + commit 7d5195be76d9dd4adc28976ad153e8f7761c5855
+ * configure.ac: Add all the required m4 magic.
+
+ Avoid dereferencing pointer right after the end.
+ + commit 79502e2c1982047dcf2b776f52826f38bbd9b1fe
+ * mpi/mpicoder.c (do_get_buffer): Check the length before derefing P.
+
+2012-10-30 Werner Koch <wk@gnupg.org>
+
+ Make ancient test program useful again.
+ + commit 66adf76e634423bb72ce1f0b5ed78f4e4798f190
+ * tests/testapi.c (test_sexp): Adjust to current API. Print the
+ return code. Mark unused args.
+ (test_genkey): Mark unused args.
+ (main): Do not pass NULL to printf.
+
+ tests: Add ECC key generation tests.
+ + commit c13164884ade6b1e945cddacce2d244fd881de6b
+ * tests/keygen.c (check_generated_ecc_key): New.
+ (check_ecc_keys): New.
+ (main): Call simple ECC checks.
+
+2012-10-30 Milan Broz <mbroz@redhat.com>
+
+ PBKDF2: Allow empty passphrase.
+ + commit 8528f1ba40e587dc17e02822e529fbd7ac69a189
+ * cipher/kdf.c (gcry_kdf_derive): Allow empty passphrase for PBKDF2.
+ * tests/t-kdf.c (check_pbkdf2): Add test case for above.
+
+2012-08-16 Xi Wang <xi.wang@gmail.com>
+
+ Replace deliberate division by zero with _gcry_divide_by_zero.
+ + commit 2c54c4da19d3a79e9f749740828026dd41f0521a
+ * mpi/mpi-pow.c: Replace 1 / msize.
+ * mpi/mpih-div.c: Replace 1 / dsize.
+ * src/misc.c: Add _gcry_divide_by_zero.
+
+2012-06-21 Werner Koch <wk@gnupg.org>
+
+ Clear AESNI feature flag for x86_64.
+ + commit 2196728e2252917849c1be94417258076767021b
+ * src/hwfeatures.c (_gcry_detect_hw_features) [__x86_64__]: Clear
+ AESNI feature flag.
+
+ Beautify last change.
+ + commit 20e423212c9710ee663e12dd0f62580ceb245a6f
+ * cipher/rijndael.c: Replace C99 feature from last patch. Keep cpp
+ lines short.
+ * random/rndhw.c: Keep cpp lines short.
+ * src/hwfeatures.c (_gcry_detect_hw_features): Make cpp def chain
+ better readable.
+
+2012-06-21 Rafaël Carré <funman@videolan.org>
+
+ Enable VIA Padlock on x86_64 platforms.
+ + commit baf0dc7e9c26167ab43ba2adebcf2f1abc9d9b3b
+ * cipher/rijndael.c: Duplicate x86 assembly and convert to x86_64.
+ * random/rndhw.c: Likewise.
+ * src/hwfeatures.c: Likewise.
+
+2012-05-14 Werner Koch <wk@gnupg.org>
+
+ Add curve aliases from RFC-5656.
+ + commit 39c123b729a472ace039f8536d07f8b9a5f4675a
+ * cipher/ecc.c (curve_aliases): Add "nistp???" entries.
+
+2012-04-16 Werner Koch <wk@gnupg.org>
+
+ State new contribution rules.
+ + commit 3bb858551cd5d84e43b800edfa2b07d1529718a9
+ * doc/DCO: New.
+ * doc/HACKING: Document new rules.
+
+2012-04-04 Tomas Mraz <tmraz@fedoraproject.org>
+
+ Add GCRYCTL_SET_ENFORCED_FIPS_FLAG command.
+ + commit 90e49a11733bfba9c3c505ac487282d35757f682
+ * doc/gcrypt.texi: Add documentation of the new command.
+ * src/fips.c (_gcry_enforced_fips_mode): Report the enforced fips mode
+ only when fips mode is enabled.
+ (_gcry_set_enforced_fips_mode): New function.
+ * src/g10lib.h: Add the _gcry_set_enforced_fips_mode prototype.
+ * src/gcrypt.h.in: Add the GCRYCTL_SET_ENFORCED_FIPS_FLAG.
+ * src/global.c (_gcry_vcontrol): Handle the new command.
+
+2012-02-17 Ulrich Müller <ulm@gentoo.org>
+
+ Rework selftest in idea.c.
+ + commit 70cca617ed75ea292e1fed769114dda5cc1d76f1
+ * cipher/idea.c (do_setkey): Execute selftest when first called.
+ (decrypt_block): Remove commented-out code.
+ (selftest): Execute all selftests. Return NULL on success, or
+ string in case of error.
+
+2012-02-16 Werner Koch <wk@gnupg.org>
+
+ Fix missing prototype.
+ + commit 46035d28c9b413851d43a4008fdc8e4cdf5d686b
+ * src/g10lib.h (_gcry_secmem_module_init): Make it a real prototype.
+
+2012-02-16 Ulrich Müller <ulm@gentoo.org>
+
+ Add support for the IDEA cipher.
+ + commit 318fd85f377c060908d371f792d41e599b3b7483
+ Adapt idea.c to the Libgcrypt framework.
+ Add IDEA to cipher_table and to the build system.
+
+ Patents on IDEA have expired:
+ Europe: EP0482154 on 2011-05-16,
+ Japan: JP3225440 on 2011-05-16,
+ U.S.: 5,214,703 on 2012-01-07.
+
+ * configure.ac: Add idea to the list of available ciphers.
+ Define USE_IDEA if idea is enabled.
+ * cipher/cipher.c (cipher_table): Add entry for IDEA.
+ * cipher/idea.c: Update comment about patents.
+ Include proper header files and remove redundant declarations.
+ (expand_key, cipher, do_setkey, encrypt_block, decrypt_block):
+ Define function arguments as const where appropriate.
+ (cipher): Test for !WORDS_BIGENDIAN instead of LITTLE_ENDIAN_HOST.
+ (do_setkey, decrypt_block): Don't call selftest.
+ (idea_setkey): New function, wrapper for do_setkey.
+ (idea_encrypt): New function, wrapper for encrypt_block.
+ (_gcry_cipher_spec_idea): Define.
+ * cipher/Makefile.am (EXTRA_libcipher_la_SOURCES): Add idea.c.
+ * src/cipher.h (_gcry_cipher_spec_idea): Declare.
+ * tests/basic.c (check_ciphers): Add GCRY_CIPHER_IDEA.
+
+2012-01-09 Werner Koch <wk@gnupg.org>
+
+ Include an IDEA implementation.
+ + commit 6078b05f5340d886e0b9e6cee1d9b5043e0cb210
+ The code is the old IDEA test code, written by me back in 1997 and
+ distributed on a Danish FTP server. This commit is only for
+ reference. To use the code it has to be adjusted to the Libgcrypt
+ framework.
+
+2012-01-03 Marcus Brinkmann <marcus.brinkmann@ruhr-uni-bochum.de>
+
+ Fix pthread locking and remove defunctional support for static lock init.
+ + commit 38fcd59ce774eaa3d65f2f7534c989afd860eb56
+ * src/ath.c: Include assert.h.
+ (ath_mutex_destroy, ath_mutex_lock, ath_mutex_unlock): Dereference LOCK.
+ * src/g10lib.h (_gcry_secmem_module_init): New declaration.
+ * src/global.c (global_init): Call _gcry_secmem_module_init.
+ * src/secmem.c (_gcry_secmem_module_init): New function.
+
+2011-12-16 Werner Koch <wk@gnupg.org>
+
+ Add alignment tests for the cipher tests.
+ + commit 14cf1f7e338fedb8edaff5631441746605152bd6
+ * tests/basic.c (check_one_cipher): Factor most code out to
+ check_one_cipher_core. Call that core function several times using
+ different alignment settings.
+ (check_one_cipher_core): New. Add extra args to allow alignment
+ testing.
+
+2011-12-07 Werner Koch <wk@gnupg.org>
+
+ tests/prime: Add option to create a well known private key.
+ + commit 16f5654643d584e3bc739b636752d779176b2191
+ * tests/prime.c (print_mpi, create_42prime): New.
+ (main): Add option --42.
+
+2011-12-01 Werner Koch <wk@gnupg.org>
+
+ Do not build the random-daemon by make distcheck.
+ + commit ea1fb538d99f1ec093f2fef86f4f29176ec27826
+ * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Disable building of the
+ random daemon
+
+ Generate the ChangeLog from commit logs.
+ + commit 137d73191c904926ba529376144ee8239af4ca02
+ * scripts/gitlog-to-changelog: New script. Taken from gnulib.
+ * scripts/git-log-fix: New file.
+ * scripts/git-log-footer: New file.
+ * doc/HACKING: Describe the ChangeLog policy
+ * ChangeLog: New file.
+ * Makefile.am (EXTRA_DIST): Add new files.
+ (gen-ChangeLog): New.
+ (dist-hook): Run gen-ChangeLog.
+
+ Rename all ChangeLog files to ChangeLog-2011.
+
+2011-12-01 Werner Koch <wk@gnupg.org>
+
+ NB: Changes done before December 1st, 2011 are described in
+ per directory files named ChangeLog-2011. See doc/HACKING for
+ details.
+
+ -----
+ Copyright (C) 2011 Free Software Foundation, Inc.
+
+ Copying and distribution of this file and/or the original GIT
+ commit log messages, with or without modification, are
+ permitted provided the copyright notice and this notice are
+ preserved.
DIST_SUBDIRS = m4 compat mpi cipher random src doc tests
SUBDIRS = compat mpi cipher random src $(doc) tests
-EXTRA_DIST = autogen.sh autogen.rc README.GIT LICENSES \
- ChangeLog-2011 build-aux/ChangeLog-2011 doc/ChangeLog-2011 \
- m4/ChangeLog-2011 cipher/ChangeLog-2011 src/ChangeLog-2011 \
- random/ChangeLog-2011 tests/ChangeLog-2011 mpi/ChangeLog-2011 \
- build-aux/git-log-footer build-aux/git-log-fix VERSION
+EXTRA_DIST = autogen.sh autogen.rc README.GIT LICENSES \
+ ChangeLog-2011 build-aux/ChangeLog-2011 doc/ChangeLog-2011 \
+ m4/ChangeLog-2011 cipher/ChangeLog-2011 src/ChangeLog-2011 \
+ random/ChangeLog-2011 tests/ChangeLog-2011 mpi/ChangeLog-2011 \
+ build-aux/libtool-patch.sed \
+ build-aux/git-log-footer build-aux/git-log-fix VERSION
DISTCLEANFILES =
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 1992, 1999, 2000, 2002 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, see <http://www.gnu.org/licenses/>.
+# SPDX-License-Identifier: LGPL-2.1-or-later
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope distdir distdir-am dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
+ config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(top_srcdir)/build-aux/compile \
+ $(top_srcdir)/build-aux/config.guess \
+ $(top_srcdir)/build-aux/config.sub \
+ $(top_srcdir)/build-aux/install-sh \
+ $(top_srcdir)/build-aux/ltmain.sh \
+ $(top_srcdir)/build-aux/missing AUTHORS COPYING COPYING.LIB \
+ ChangeLog INSTALL NEWS README THANKS TODO build-aux/compile \
+ build-aux/config.guess build-aux/config.rpath \
+ build-aux/config.sub build-aux/depcomp build-aux/install-sh \
+ build-aux/ltmain.sh build-aux/mdate-sh build-aux/missing \
+ build-aux/texinfo.tex mkinstalldirs
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+DIST_TARGETS = dist-bzip2 dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Location of the released tarball archives. This is prefixed by
+# the variable RELEASE_ARCHIVE in ~/.gnupg-autogen.rc. For example:
+# RELEASE_ARCHIVE=wk@somehost:archive/tarballs
+RELEASE_ARCHIVE_SUFFIX = libgcrypt/v1.10
+# The variable RELEASE_SIGNING_KEY in ~/.gnupg-autogen.rc is used
+# to specify the key for signing. For example:
+# RELEASE_SIGNKEY=D8692123C4065DEA5E0F3AB5249B39D24F25E3B6
+ACLOCAL_AMFLAGS = -I m4
+AM_DISTCHECK_DVI_TARGET = pdf
+DISTCHECK_CONFIGURE_FLAGS = --disable-random-daemon --enable-doc \
+ --enable-random=auto
+
+
+# (A suitable gitlog-to-changelog script can be found in GnuPG master.)
+GITLOG_TO_CHANGELOG = gitlog-to-changelog
+@BUILD_DOC_FALSE@doc =
+@BUILD_DOC_TRUE@doc = doc
+DIST_SUBDIRS = m4 compat mpi cipher random src doc tests
+SUBDIRS = compat mpi cipher random src $(doc) tests
+EXTRA_DIST = autogen.sh autogen.rc README.GIT LICENSES \
+ ChangeLog-2011 build-aux/ChangeLog-2011 doc/ChangeLog-2011 \
+ m4/ChangeLog-2011 cipher/ChangeLog-2011 src/ChangeLog-2011 \
+ random/ChangeLog-2011 tests/ChangeLog-2011 mpi/ChangeLog-2011 \
+ build-aux/libtool-patch.sed \
+ build-aux/git-log-footer build-aux/git-log-fix VERSION
+
+DISTCLEANFILES =
+gen_start_date = 2011-12-01T14:00:00
+
+# Macro to help the release target.
+RELEASE_NAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @test -f $@ || rm -f stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-zstd: distdir
+ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ *.tar.zst*) \
+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--refresh check check-am clean clean-cscope clean-generic \
+ clean-libtool cscope cscopelist-am ctags ctags-am dist \
+ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
+ dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \
+ distclean-generic distclean-hdr distclean-libtool \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Add all the files listed in "distfiles" files to the distribution
+dist-hook: gen-ChangeLog
+ @set -e; \
+ for file in `cd $(top_srcdir); \
+ find mpi -type f -name distfiles`; do \
+ dir=`dirname $$file` ; $(mkinstalldirs) $(distdir)/$$dir ; \
+ for i in distfiles `cat $(top_srcdir)/$$file` ; do \
+ ln $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i 2> /dev/null \
+ || cp -p $(top_srcdir)/$$dir/$$i $(distdir)/$$dir/$$i; \
+ done ; \
+ done
+
+distcheck-hook:
+ set -e; ( \
+ pref="#+macro: $$(echo $(PACKAGE_NAME)|tr '-' '_')_" ;\
+ reldate="$$(date -u +%Y-%m-%d)" ;\
+ echo "$${pref}ver $(PACKAGE_VERSION)" ;\
+ echo "$${pref}date $${reldate}" ;\
+ list='$(DIST_ARCHIVES)'; for i in $$list; do \
+ case "$$i" in *.tar.bz2) \
+ echo "$${pref}size $$(wc -c <$$i|awk '{print int($$1/1024)}')k" ;\
+ echo "$${pref}sha1 $$(sha1sum <$$i|cut -d' ' -f1)" ;\
+ echo "$${pref}sha2 $$(sha256sum <$$i|cut -d' ' -f1)" ;;\
+ esac;\
+ done ) | tee $(distdir).swdb
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ if test -e $(top_srcdir)/.git; then \
+ (cd $(top_srcdir) && \
+ $(GITLOG_TO_CHANGELOG) --append-dot --tear-off \
+ --amend=build-aux/git-log-fix \
+ --since=$(gen_start_date) ) > $(distdir)/cl-t; \
+ cat $(top_srcdir)/build-aux/git-log-footer >> $(distdir)/cl-t;\
+ rm -f $(distdir)/ChangeLog; \
+ mv $(distdir)/cl-t $(distdir)/ChangeLog; \
+ fi
+
+stowinstall:
+ $(MAKE) $(AM_MAKEFLAGS) install prefix=/usr/local/stow/libgcrypt
+
+release:
+ +(set -e;\
+ if [ "$(abs_top_builddir)" = "$(abs_top_srcdir)" ]; then \
+ echo "error: build directory must not be the source directory" >&2;\
+ exit 2;\
+ fi ;\
+ echo "/* Build started at $$(date -uIseconds) */" ;\
+ cd $(top_srcdir); \
+ ./autogen.sh --force; \
+ cd $(abs_top_builddir); \
+ rm -rf dist; mkdir dist ; cd dist ; \
+ $(abs_top_srcdir)/configure --enable-maintainer-mode; \
+ $(MAKE) distcheck; \
+ echo "/* Build finished at $$(date -uIseconds) */" ;\
+ echo "/*" ;\
+ echo " * Please run the final step interactivly:" ;\
+ echo " * make sign-release" ;\
+ echo " */" ;\
+ ) 2>&1 | tee "$(RELEASE_NAME).buildlog"
+
+sign-release:
+ +(set -e; \
+ test $$(pwd | sed 's,.*/,,') = dist || cd dist; \
+ x=$$(grep '^RELEASE_ARCHIVE=' $$HOME/.gnupg-autogen.rc|cut -d= -f2);\
+ if [ -z "$$x" ]; then \
+ echo "error: RELEASE_ARCHIVE missing in ~/.gnupg-autogen.rc">&2; \
+ exit 2;\
+ fi;\
+ myarchive="$$x/$(RELEASE_ARCHIVE_SUFFIX)";\
+ x=$$(grep '^RELEASE_SIGNKEY=' $$HOME/.gnupg-autogen.rc|cut -d= -f2);\
+ if [ -z "$$x" ]; then \
+ echo "error: RELEASE_SIGNKEY missing in ~/.gnupg-autogen.rc">&2; \
+ exit 2;\
+ fi;\
+ mysignkey="$$x";\
+ files1="$(RELEASE_NAME).tar.bz2 \
+ $(RELEASE_NAME).tar.gz" ; \
+ files2="$(RELEASE_NAME).tar.bz2.sig \
+ $(RELEASE_NAME).tar.gz.sig \
+ $(RELEASE_NAME).swdb \
+ $(RELEASE_NAME).buildlog" ;\
+ echo "/* Signing the source tarball ..." ;\
+ gpg -sbu $$mysignkey $(RELEASE_NAME).tar.bz2 ;\
+ gpg -sbu $$mysignkey $(RELEASE_NAME).tar.gz ;\
+ cat $(RELEASE_NAME).swdb >swdb.snippet;\
+ echo >>swdb.snippet ;\
+ sha1sum $${files1} >>swdb.snippet ;\
+ cat "../$(RELEASE_NAME).buildlog" swdb.snippet \
+ | gzip >$(RELEASE_NAME).buildlog ;\
+ echo "Copying to archive $$myarchive ..." ;\
+ scp -p $${files1} $${files2} $${myarchive}/ || true;\
+ echo '/*' ;\
+ echo ' * All done; for checksums see dist/swdb.snippet' ;\
+ echo ' */' ;\
+ )
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
+Noteworthy changes in version 1.10.3 (2023-11-14) [C24/A4/R3]
+-------------------------------------------------
+
+ * Bug fixes:
+
+ - Fix public key computation for other EdDSA curves.
+ [rC469919751d6e]
+
+ - Remove out of core handler diagnostic in FIPS mode. [T6515]
+
+ - Check that the digest size is not zero in gcry_pk_sign_md and
+ gcry_pk_verify_md. [T6539]
+
+ - Make store an s-exp with \0 is considered to be binary. [T6747]
+
+ - Various constant-time improvements.
+
+ * Portability:
+
+ - Use getrandom call only when supported by the platform. [T6442]
+
+ - Change the default for --with-libtool-modification to never.
+ [T6619]
+
+
+ Release-info: https://dev.gnupg.org/T6817
+
+
+Noteworthy changes in version 1.10.2 (2023-04-06) [C24/A4/R2]
+-------------------------------------------------
+
+ * Bug fixes:
+
+ - Fix Argon2 for the case output > 64. [rC13b5454d26]
+
+ - Fix missing HWF_PPC_ARCH_3_10 in HW feature. [rCe073f0ed44]
+
+ - Fix RSA key generation failure in forced FIPS mode. [T5919]
+
+ - Fix gcry_pk_hash_verify for explicit hash. [T6066]
+
+ - Fix a wrong result of gcry_mpi_invm. [T5970]
+
+ - Allow building with --disable-asm for HPPA. [T5976]
+
+ - Fix Jitter RNG for building native on Windows. [T5891]
+
+ - Allow building with -Oz. [T6432]
+
+ - Enable the fast path to ChaCha20 only when supported. [T6384]
+
+ - Use size_t to avoid counter overflow in Keccak when directly
+ feeding more than 4GiB. [T6217]
+
+ * Other:
+
+ - Do not use secure memory for a DRBG instance. [T5933]
+
+ - Do not allow PKCS#1.5 padding for encryption in FIPS mode.
+ [T5918]
+
+ - Fix the behaviour for child process re-seeding in the DRBG.
+ [rC019a40c990]
+
+ - Allow verification of small RSA signatures in FIPS mode. [T5975]
+
+ - Allow the use of a shorter salt for KDFs in FIPS mode. [T6039]
+
+ - Run digest+sign self tests for RSA and ECC in FIPS mode.
+ [rC06c9350165]
+
+ - Add function-name based FIPS indicator function.
+ GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION. This is not considered
+ an ABI changes because the new FIPS features were not yet
+ approved. [rC822ee57f07]
+
+ - Improve PCT in FIPS mode. [rC285bf54b1a, rC4963c127ae, T6397]
+
+ - Use getrandom (GRND_RANDOM) in FIPS mode. [rCcf10c74bd9]
+
+ - Disable RSA-OAEP padding in FIPS mode. [rCe5bfda492a]
+
+ - Check minimum allowed key size in PBKDF in FIPS mode.
+ [T6039,T6219]
+
+ - Get maximum 32B of entropy at once in FIPS mode. [rCce0df08bba]
+
+ - Prefer gpgrt-config when available. [T5034]
+
+ - Mark AESWRAP as approved FIPS algorithm. [T5512]
+
+ - Prevent usage of long salt for PSS in FIPS mode. [rCfdd2a8b332]
+
+ - Prevent usage of X9.31 keygen in FIPS mode. [rC392e0ccd25]
+
+ - Remove GCM mode from the allowed FIPS indicators. [rC1540698389]
+
+ - Add explicit FIPS indicators for hash and MAC algorithms. [T6376]
+
+
+ Release-info: https://dev.gnupg.org/T5905
+
+
Noteworthy changes in version 1.10.1 (2022-03-28) [C24/A4/R1]
-------------------------------------------------
Version 1.10
Copyright (C) 1989,1991-2018 Free Software Foundation, Inc.
- Copyright (C) 2012-2022 g10 Code GmbH
- Copyright (C) 2013-2022 Jussi Kivilinna
+ Copyright (C) 2012-2023 g10 Code GmbH
+ Copyright (C) 2013-2023 Jussi Kivilinna
Libgcrypt is free software. See the file AUTHORS for full copying
notices, and LICENSES for notices about contributions that require
--- /dev/null
+# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],,
+[m4_warning([this file was generated for autoconf 2.71.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.16'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.16.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.16.5])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Figure out how to run the assembler. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AS
+# ----------
+AC_DEFUN([AM_PROG_AS],
+[# By default we simply use the C compiler to build assembly code.
+AC_REQUIRE([AC_PROG_CC])
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)])
+AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE="gmake" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+m4_ifdef([_$0_ALREADY_INIT],
+ [m4_fatal([$0 expanded multiple times
+]m4_defn([_$0_ALREADY_INIT]))],
+ [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+AC_SUBST([CTAGS])
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+AC_SUBST([ETAGS])
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+AC_SUBST([CSCOPE])
+
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/ax_cc_for_build.m4])
+m4_include([m4/gpg-error.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/noexecstack.m4])
+m4_include([m4/socklen.m4])
+m4_include([acinclude.m4])
+++ /dev/null
-#!/bin/sh
-# db2any - Docbook to html/ps/info rendering
-#
-# Copyright (C) 2000, 2001 Free Software Foundation, Inc
-#
-# This is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-#
-# Note: This requires a Posix shell
-#
-# $Id$
-
-pgm="db2any"
-version="0.7.3"
-
-usage () {
- echo 'usage: db2any [--help] [options] filename' >&2
- exit 1
-}
-
-show_banner () {
- cat <<EOF
-$pgm $version
-Copyright (C) 2001 Free Software Foundation, Inc.
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-EOF
-}
-
-show_help () {
- show_banner
- cat <<EOF
-usage: db2any [options] docbookfile
-
-Options:
- --mode select the mode (one of: ${all_modes})
- --help
- --nosplit
- --copyfiles
- --systemcheck
- --verbose
- --draft
- --manvolume n
- --usestyle file
- --ignore-xref [not yet implemented]
-
-EOF
- exit 0
-}
-
-# a list of all possible stylesheet locations
-stylesheet_dirs='
-/usr/local/lib/dsssl/stylesheets/docbook
-/usr/local/share/dsssl/stylesheets/docbook
-/usr/local/lib/sgml/stylesheet/dsssl/docbook/nwalsh
-/usr/local/share/sgml/stylesheet/dsssl/docbook/nwalsh
-/usr/lib/dsssl/stylesheets/docbook
-/usr/share/dsssl/stylesheets/docbook
-/usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh
-/usr/share/sgml/stylesheet/dsssl/docbook/nwalsh
-/usr/lib/sgml/stylesheets/nwalsh-modular
-/usr/share/sgml/stylesheets/nwalsh-modular
-'
-
-all_modes="check tex html man texinfo"
-input=
-verbose=no
-draft=no
-nosplit=no
-copyfiles=no
-systemcheck_only=no
-mode=none
-manvolume="man"
-usestyle=""
-expected_args=1
-ignore_xref=no
-while test "`echo $1 | head -c1`" = "-"; do
- case $1 in
- --version)
- echo "$pgm $version"
- exit 0
- ;;
- --help|-h|-help)
- show_help
- exit 0
- ;;
- --nosplit)
- nosplit=yes
- ;;
- --copyfiles)
- copyfiles=yes
- ;;
- --systemcheck)
- systemcheck_only=yes
- expected_args=0
- ;;
- --mode)
- shift
- if [ $# = 0 ]; then
- echo "$pgm: missing argument for --mode" >&2
- exit 1
- fi
- mode="$1"
- ;;
- --manvolume)
- shift
- if [ $# = 0 ]; then
- echo "$pgm: missing argument for --manvolume" >&2
- exit 1
- fi
- manvolume="$1"
- ;;
- --usestyle)
- shift
- if [ $# = 0 ]; then
- echo "$pgm: missing argument for --usestyle" >&2
- exit 1
- fi
- usestyle="$1"
- ;;
- --verbose)
- verbose=yes
- ;;
- --draft)
- draft=yes
- ;;
- --ignore-xref)
- ignore_xref=yes
- ;;
- --)
- shift
- break
- ;;
- *)
- echo "$pgm: invalid option $1" >&2
- exit 1
- ;;
- esac
- shift
-done
-
-if [ $# = $expected_args ]; then
- if [ $# = 1 ]; then
- input="$1"
- fi
-else
- usage
-fi
-
-# check the mode
-case "$mode" in
- html|HTML)
- mode=html
- ;;
- tex|TEX|TeX|dvi)
- mode=dvi
- ;;
- man|MAN)
- mode=man
- ;;
- texi|TEXI|texinfo|TEXINFO)
- mode=texinfo
- ;;
- check)
- ;;
- none)
- if [ $systemcheck_only != yes ]; then
- echo "$pgm: no mode specified; use one of: ${all_modes}" >&2
- exit 1
- fi
- ;;
- *)
- echo "$pgm: invalid mode $mode" >&2
- echo "$pgm: valid modes are: ${all_modes}" >&2
- exit 1
- ;;
-esac
-
-if [ -n $usestyle ]; then
- if [ ! -f $usestyle ]; then
- echo "$pgm: cannot access local stylesteet" >&2
- exit 1
- fi
-fi
-
-#######################################
-# Options are all parsed here #
-#######################################
-
-# check whether the given program is availbale in the path
-check_prog () {
- tmp="$1"
- save_ifs="$IFS"; IFS=":"
- for i in $PATH; do
- test -z "$i" && i=.
- if test -f $i/$tmp; then
- IFS="$save_ifs"
- return 0
- fi
- done
- IFS="$save_ifs"
- return 1
-}
-
-
-# Figure out all what we need to know about the system we are
-# running on and where the Docbook tools are installed.
-# Tell about it when running in verbose mode.
-do_systemcheck () {
- # look for Jade
- jade_version=`jade -v </dev/null 2>&1 | \
- sed -n 's/.*:I:.*Jade version "\([0-9.]*\)"/\1/p'`
- if [ -z "$jade_version" ]; then
- echo "$pgm: error: jade not found" >&2
- exit 1
- fi
- [ $verbose = yes ] && echo "$pgm: Jade version $jade_version found" >&2
-
- # look for JadeTeX
- if ! jadetex -v 2>/dev/null | grep -q '^TeX' ; then
- echo "$pgm: error: jadetex not found" >&2
- exit 1
- fi
-
- # look for the docbook-to-man script. Fixme: we should check that it
- # it is a recent version.
- if ! docbook-to-man 2>&1 | grep -q '^usage' ; then
- echo "$pgm: error: docbook-to-man not found" >&2
- exit 1
- fi
- [ $verbose = yes ] && echo "$pgm: docbook-to-man found" >&2
-
- # look for the docbook-to-texi scripts.
- if ! check_prog docbook2texi ; then
- echo "$pgm: error: docbook2texi not found" >&2
- exit 1
- fi
- [ $verbose = yes ] && echo "$pgm: docbook2texi found" >&2
- if ! sgml2xml -v /dev/null 2>&1 | grep 'SP version' >/dev/null 2>&1 ; then
- echo "$pgm: error: sgml2xml not found" >&2
- exit 1
- fi
- [ $verbose = yes ] && echo "$pgm: sgml2xml found" >&2
-
- # figure out where our stylesheets are
- tex_stylesheet=none
- for d in ${stylesheet_dirs}; do
- file=${d}/print/docbook.dsl
- if [ -f $file ]; then
- tex_stylesheet=$file
- break
- fi
- done
- [ $verbose = yes ] && echo "$pgm: TeX stylesheet: ${tex_stylesheet}" >&2
- html_stylesheet=none
- for d in ${stylesheet_dirs}; do
- file=${d}/html/docbook.dsl
- if [ -f $file ]; then
- html_stylesheet=$file
- break
- fi
- done
- [ $verbose = yes ] && echo "$pgm: HTML stylesheet: ${html_stylesheet}" >&2
- if [ $tex_stylesheet = none -o $html_stylesheet = none ]; then
- echo "$pgm: error: stylesheets not found" >&2
- exit 1
- fi
-
-}
-
-
-# Render the docbook as HTML
-render_html () {
- output="`basename $input| sed 's/\.sgml$//'`.html"
-
- if [ -n "$usestyle" ]; then
- tmpstyle="`pwd`/`basename $usestyle`-html.tmp"
- if [ ! -f $tmpstyle -o $usestyle -nt $tmpstyle ]; then
- sed "s%@DOCBOOK_DSL@%$html_stylesheet%" $usestyle > $tmpstyle
- fi
- else
- tmpstyle="$tex_stylesheet"
- fi
-
-
- # --nosplts creates just one HTML file
- if test $nosplit = yes; then
- echo "running jade on '$input' ..." >&2
- jade -D . -d $tmpstyle -t sgml -i html -V nochunks $input > $output
- echo "$output created"
- return 0
- fi
-
- # Make sure that we have a html subdir
- if test -d html ; then
- :
- else
- if mkdir html; then
- echo "'html' directory created" >&2
- else
- echo "failed to create 'html' directory" >&2
- exit 1
- fi
- fi
-
- outputdir="html/`basename $input| sed 's/\.sgml$//'`"
-
- if test -d $outputdir ; then
- :
- else
- if mkdir $outputdir; then
- echo "'$outputdir' created" >&2
- else
- echo "failed to create '$outputdir'" >&2
- exit 1
- fi
- fi
- echo "creating html pages in '$outputdir' ..." >&2
- if test "$input" = "`basename $input`"; then
- inp="../../$input"
- else
- inp="$input"
- fi
-
- [ $verbose = yes ] && echo "running jade on '$inp' ..." >&2
- (cd $outputdir && jade -D . -t sgml -i html -d $tmpstyle $inp )
- [ $verbose = yes ] && echo "html version in '$outputdir' created" >&2
-
- # break out all filerefs and copy them to the outputdirectory
- # fixme: handling of path components is wrong
- if test $copyfiles = yes; then
- echo "looking for filerefs ..." >&2
- for file in `nsgmls -i html $input \
- | awk '/^AFILEREF[ \t]+CDATA/ {print $3}'`; do
- d=$outputdir/`basename $file`
- if cat $file > $outputdir/`basename $file` ; then
- echo " $file -> $d" >&2
- fi
- done
- fi
-
- mainfile=`ls $outputdir/${doctype}* | head -1`
-
- # create a html index file for it, so that we can more easy
- # find the rendred pages
- cat > $output <<EOF
-<html><title>$output</title>
-<body>
-
-<a href="$mainfile">$mainfile</a>
-
-</body>
-</html>
-EOF
-
- [ $verbose = yes ] && echo "$output created with link to '$mainfile'" >&2
-}
-
-
-# This function expects the source file in $texfile and
-# the name of the logfle in $logfile
-run_jadetex () {
- [ -f $logfile ] && rm $logfile
- jadetex $texfile
- if ! tail $logfile | grep -q '^Output written on'; then
- echo "JadeTeX failed" >&2
- exit 1
- fi
-}
-
-# Render the docbook to DVI
-render_dvi () {
- output="`basename $input| sed 's/\.sgml$//'`.dvi"
- texfile="`basename $input| sed 's/\.sgml$//'`.tex"
- logfile="`basename $input| sed 's/\.sgml$//'`.log"
- auxfile="`basename $input| sed 's/\.sgml$//'`.aux"
-
- if [ -n "$usestyle" ]; then
- tmpstyle="`basename $usestyle`-tex.tmp"
- if [ ! -f $tmpstyle -o $usestyle -nt $tmpstyle ]; then
- sed "s%@DOCBOOK_DSL@%$tex_stylesheet%" $usestyle > $tmpstyle
- fi
- else
- tmpstyle="$tex_stylesheet"
- fi
- [ $verbose = yes ] && echo "running jade on '$input' ..." >&2
- jade -D . -t tex -i tex -d $tmpstyle -o $texfile $input
- if ! tail $texfile | grep -q '\\endFOT{}'; then
- echo "Jade failed" >&2
- exit 1
- fi
-
- # Better delete the aux file first
- [ -f $auxfile ] && rm $auxfile
- # The first run won't get the references right, so we have to
- # run it 2 or 3 times. JadeTex doesn't indicate whether a third
- # run is required, so we do it always.
- run_jadetex
- if [ $draft = no ]; then
- if tail -100 $logfile \
- | grep -q '^LaTeX Warning: There were undefined references'; then
- echo 'running JadeTeX a second and third 2time' >&2
- run_jadetex
- run_jadetex
- fi
- fi
-
- [ $verbose = yes ] && echo "$output created as '$output'" >&2
-}
-
-# Render the docbook to troff
-render_man () {
- output="`basename $input| sed 's/\.sgml$//'`.$manvolume"
-
- [ $verbose = yes ] && echo "running docbook-to-man on '$input' ..." >&2
- docbook-to-man $input > $output
- [ $verbose = yes ] && echo "man page '$output' created" >&2
-}
-
-# Render the docbook to texinfo
-render_texinfo () {
- output="`basename $input| sed 's/\.sgml$/.texi/'`"
- tmpxml="`basename $input| sed 's/\.sgml$/.xml/'`"
-
- [ $verbose = yes ] && echo "running sgml2xml on '$input' ..." >&2
- sgml2xml -x lower $input > $tmpxml
- [ $verbose = yes ] && echo "running docbook2texi on '$tmpxml' ..." >&2
- docbook2texi $tmpxml | sed 's,--,---,' >$output
- rm $tmpxml
- [ $verbose = yes ] && echo "texinfo '$output' created" >&2
-
-}
-
-#######################################
-# main function #
-#######################################
-
-do_systemcheck
-[ $systemcheck_only = yes ] && exit 0
-
-if [ ! -f "$input" ]; then
- input="$input.sgml"
- if [ ! -f "$input" ]; then
- echo "$pgm: '$input': no such file" >&2
- exit 1
- fi
-fi
-
-# grep the document type
-doctype=`grep -i '\<doctype' $input|awk 'NR==1 {print $2}'| tr '[A-Z]' '[a-z]'`
-if test -z "$doctype"; then
- echo "$pgm: error: no DOCTYPE declaration found" >&2
- exit 1
-fi
-[ $verbose = yes ] && echo "$input: DOCTYPE is '$doctype'" >&2
-
-case $mode in
- check)
- nsgmls -vs $input
- exit $?
- ;;
- html)
- render_html
- ;;
- dvi)
- render_dvi
- ;;
- man)
- render_man
- ;;
- texinfo)
- render_texinfo
- ;;
-esac
-
-
-exit 0
+++ /dev/null
-eval '(exit $?0)' && eval 'exec perl -w "$0" ${1+"$@"}'
- & eval 'exec perl -w "$0" $argv:q'
- if 0;
-
-# An hook script to check the commit log message.
-# Called by "git commit" with one argument, the name of the file
-# that has the commit message. The hook should exit with non-zero
-# status after issuing an appropriate message if it wants to stop the
-# commit. The hook is allowed to edit the commit message file.
-#
-# To enable this hook, copy it to "~/.git/hooks/commit-msg".
-#
-# This script is based on the one from GNU coreutils.
-
-use strict;
-use warnings;
-(my $ME = $0) =~ s|.*/||;
-
-my $editor = $ENV{EDITOR} || 'vi';
-$ENV{PATH} = '/bin:/usr/bin';
-
-# Rewrite the $LOG_FILE (old contents in @$LINE_REF) with an additional
-# commented diagnostic "# $ERR" line at the top.
-sub rewrite($$$)
-{
- my ($log_file, $err, $line_ref) = @_;
- local *LOG;
- open LOG, '>', $log_file
- or die "$ME: $log_file: failed to open for writing: $!";
- print LOG "# $err";
- print LOG @$line_ref;
- close LOG
- or die "$ME: $log_file: failed to rewrite: $!\n";
-}
-
-sub re_edit($)
-{
- my ($log_file) = @_;
-
- warn "Interrupt (Ctrl-C) to abort...\n";
-
- system 'sh', '-c', "$editor $log_file";
- ($? & 127) || ($? >> 8)
- and die "$ME: $log_file: the editor ($editor) failed, aborting\n";
-}
-
-# Given a $LOG_FILE name and a \@LINE buffer,
-# read the contents of the file into the buffer and analyze it.
-# If the log message passes muster, return the empty string.
-# If not, return a diagnostic.
-sub check_msg($$)
-{
- my ($log_file, $line_ref) = @_;
-
- local *LOG;
- open LOG, '<', $log_file
- or return "failed to open for reading: $!";
- @$line_ref = <LOG>;
- close LOG;
-
- my @line = @$line_ref;
- chomp @line;
-
- # Don't filter out blank or comment lines; git does that already,
- # and if we were to ignore them here, it could lead to committing
- # with lines that start with "#" in the log.
-
- # Filter out leading blank and comment lines.
- # while (@line && $line[0] =~ /^(?:#.*|[ \t]*)$/) { shift @line; }
-
- # Filter out blank and comment lines at EOF.
- # while (@line && $line[$#line] =~ /^(?:#.*|[ \t]*)$/) { pop @line; }
-
- @line == 0
- and return 'no log message';
-
- # The first line should not be too short
- 8 < length $line[0] || return 'summary line too short';
-
- # The first line should not start with an asterisk or a hash sign.
- # An asterisk might indicate that a change entry was started right
- # at the first line.
- $line[0] =~ /^[*#]/ && return "summary line starts with an * or #";
-
- # Second line should be blank or not present.
- 2 <= @line && length $line[1]
- and return 'second line must be empty';
-
- # See git-commit(1), this is the --cleanup=scissors option. Everything
- # after and including this line gets ignored.
- my $marker = '# ------------------------ >8 ------------------------';
-
- # Limit line length to allow for the ChangeLog's leading TAB.
- foreach my $line (@line)
- {
- 72 < length $line && $line =~ /^[^#]/
- and return 'line longer than 72 characters';
-
- last if $line eq $marker;
- }
-
- return '';
-}
-
-{
- @ARGV == 1
- or die;
-
- my $log_file = $ARGV[0];
-
- while (1)
- {
- my @line;
- my $err = check_msg $log_file, \@line;
- $err eq ''
- and last;
- $err = "$ME: $err\n";
- warn $err;
- exit 1;
-
- # Insert the diagnostic as a comment on the first line of $log_file.
- #rewrite $log_file, $err, \@line;
- #re_edit $log_file;
- #
- ## Stop if our parent is killed.
- #getppid() == 1
- # and last;
- }
-}
-
-# Local Variables:
-# mode: perl
-# End:
--- /dev/null
+#
+# This is a sed script to patch the generated libtool,
+# which works well against both of libtool 2.4.2 and 2.4.7.
+#
+# You may use this work under the terms of a Creative Commons CC0 1.0
+# License/Waiver.
+#
+# CC0 Public Domain Dedication
+# https://creativecommons.org/publicdomain/zero/1.0/
+
+#
+# This sed script applys two hunks of the patch:
+#
+# Part1: after the comment "# bleh windows"
+# Part2: after the comment "#extension on DOS 8.3..."
+#
+# Only when those two parts are patched correctly, it exits with 0 or
+# else, it exits with 1
+#
+
+# Find the part 1, by the comment
+/^[ \t]*# bleh windows$/b part1_start
+# Not found the part1, raise an error
+$ q1
+b
+
+:part1_start
+n
+# The first line in the part 1 must be the begining of the case statement.
+/^[ \t]*case \$host in$/! q1
+n
+# Insert the entry for x86_64-*mingw32*, for modified versuffix.
+i\
+ x86_64-*mingw32*)
+i\
+ func_arith $current - $age
+i\
+ major=$func_arith_result
+i\
+ versuffix="6-$major"
+i\
+ ;;
+:part1_0
+# Find the end of the case statement
+/^[ \t]*esac$/b find_part2
+# Not found the end of the case statement, raise an error
+$ q1
+n
+b part1_0
+
+:find_part2
+/^[ \t]*# extension on DOS 8.3 file.*systems.$/b part2_process
+# Not found the part2, raise an error
+$ q1
+n
+b find_part2
+
+:part2_process
+$ q1
+s/^[ \t]*\(versuffix=\)\(.*\)\(-$major\)\(.*\)$/\t case \$host in\n\t x86_64-*mingw32*)\n\t \1\26\3\4\n\t ;;\n\t *)\n\t \1\2\3\4\n\t ;;\n\t esac/
+t part2_done
+n
+b part2_process
+
+:part2_done
+$ q0
+n
+b part2_done
*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
# The PATH hackery in wrapper scripts is required on Windows
# and Darwin in order for the loader to find any dlls it needs.
- func_warning "\`-no-install' is ignored for $host"
- func_warning "assuming \`-no-fast-install' instead"
+ # func_warning "\`-no-install' is ignored for $host"
+ # func_warning "assuming \`-no-fast-install' instead"
fast_install=no
;;
*) no_install=yes ;;
if ENABLE_O_FLAG_MUNGING
-o_flag_munging = sed -e 's/-O\([2-9sg][2-9sg]*\)/-O1/' -e 's/-Ofast/-O1/g'
+o_flag_munging = sed -e 's/-O\([2-9sgz][2-9sgz]*\)/-O1/' -e 's/-Ofast/-O1/g'
else
o_flag_munging = cat
endif
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Makefile for cipher modules
+# Copyright (C) 1998, 1999, 2000, 2001, 2002,
+# 2003, 2009 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+# Process this file with automake to produce Makefile.in
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = cipher
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_libcipher_la_OBJECTS = cipher.lo cipher-cbc.lo cipher-cfb.lo \
+ cipher-ofb.lo cipher-ctr.lo cipher-aeswrap.lo cipher-ccm.lo \
+ cipher-cmac.lo cipher-gcm.lo cipher-poly1305.lo cipher-ocb.lo \
+ cipher-xts.lo cipher-eax.lo cipher-siv.lo cipher-gcm-siv.lo \
+ cipher-selftest.lo pubkey.lo pubkey-util.lo md.lo mac.lo \
+ mac-hmac.lo mac-cmac.lo mac-gmac.lo mac-poly1305.lo \
+ poly1305.lo kdf.lo primegen.lo hash-common.lo dsa-common.lo \
+ rsa-common.lo
+libcipher_la_OBJECTS = $(am_libcipher_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/arcfour-amd64.Plo \
+ ./$(DEPDIR)/arcfour.Plo ./$(DEPDIR)/blake2.Plo \
+ ./$(DEPDIR)/blake2b-amd64-avx2.Plo \
+ ./$(DEPDIR)/blake2s-amd64-avx.Plo \
+ ./$(DEPDIR)/blowfish-amd64.Plo ./$(DEPDIR)/blowfish-arm.Plo \
+ ./$(DEPDIR)/blowfish.Plo ./$(DEPDIR)/camellia-aarch64.Plo \
+ ./$(DEPDIR)/camellia-aesni-avx-amd64.Plo \
+ ./$(DEPDIR)/camellia-aesni-avx2-amd64.Plo \
+ ./$(DEPDIR)/camellia-arm.Plo ./$(DEPDIR)/camellia-glue.Plo \
+ ./$(DEPDIR)/camellia-vaes-avx2-amd64.Plo \
+ ./$(DEPDIR)/camellia.Plo ./$(DEPDIR)/cast5-amd64.Plo \
+ ./$(DEPDIR)/cast5-arm.Plo ./$(DEPDIR)/cast5.Plo \
+ ./$(DEPDIR)/chacha20-aarch64.Plo \
+ ./$(DEPDIR)/chacha20-amd64-avx2.Plo \
+ ./$(DEPDIR)/chacha20-amd64-ssse3.Plo \
+ ./$(DEPDIR)/chacha20-armv7-neon.Plo \
+ ./$(DEPDIR)/chacha20-ppc.Plo ./$(DEPDIR)/chacha20-s390x.Plo \
+ ./$(DEPDIR)/chacha20.Plo ./$(DEPDIR)/cipher-aeswrap.Plo \
+ ./$(DEPDIR)/cipher-cbc.Plo ./$(DEPDIR)/cipher-ccm.Plo \
+ ./$(DEPDIR)/cipher-cfb.Plo ./$(DEPDIR)/cipher-cmac.Plo \
+ ./$(DEPDIR)/cipher-ctr.Plo ./$(DEPDIR)/cipher-eax.Plo \
+ ./$(DEPDIR)/cipher-gcm-armv7-neon.Plo \
+ ./$(DEPDIR)/cipher-gcm-armv8-aarch32-ce.Plo \
+ ./$(DEPDIR)/cipher-gcm-armv8-aarch64-ce.Plo \
+ ./$(DEPDIR)/cipher-gcm-intel-pclmul.Plo \
+ ./$(DEPDIR)/cipher-gcm-ppc.Plo ./$(DEPDIR)/cipher-gcm-siv.Plo \
+ ./$(DEPDIR)/cipher-gcm.Plo ./$(DEPDIR)/cipher-ocb.Plo \
+ ./$(DEPDIR)/cipher-ofb.Plo ./$(DEPDIR)/cipher-poly1305.Plo \
+ ./$(DEPDIR)/cipher-selftest.Plo ./$(DEPDIR)/cipher-siv.Plo \
+ ./$(DEPDIR)/cipher-xts.Plo ./$(DEPDIR)/cipher.Plo \
+ ./$(DEPDIR)/crc-armv8-aarch64-ce.Plo \
+ ./$(DEPDIR)/crc-armv8-ce.Plo ./$(DEPDIR)/crc-intel-pclmul.Plo \
+ ./$(DEPDIR)/crc-ppc.Plo ./$(DEPDIR)/crc.Plo \
+ ./$(DEPDIR)/des-amd64.Plo ./$(DEPDIR)/des.Plo \
+ ./$(DEPDIR)/dsa-common.Plo ./$(DEPDIR)/dsa.Plo \
+ ./$(DEPDIR)/ecc-curves.Plo ./$(DEPDIR)/ecc-ecdh.Plo \
+ ./$(DEPDIR)/ecc-ecdsa.Plo ./$(DEPDIR)/ecc-eddsa.Plo \
+ ./$(DEPDIR)/ecc-gost.Plo ./$(DEPDIR)/ecc-misc.Plo \
+ ./$(DEPDIR)/ecc-sm2.Plo ./$(DEPDIR)/ecc.Plo \
+ ./$(DEPDIR)/elgamal.Plo ./$(DEPDIR)/gost28147.Plo \
+ ./$(DEPDIR)/gostr3411-94.Plo ./$(DEPDIR)/hash-common.Plo \
+ ./$(DEPDIR)/idea.Plo ./$(DEPDIR)/kdf.Plo \
+ ./$(DEPDIR)/keccak-armv7-neon.Plo ./$(DEPDIR)/keccak.Plo \
+ ./$(DEPDIR)/mac-cmac.Plo ./$(DEPDIR)/mac-gmac.Plo \
+ ./$(DEPDIR)/mac-hmac.Plo ./$(DEPDIR)/mac-poly1305.Plo \
+ ./$(DEPDIR)/mac.Plo ./$(DEPDIR)/md.Plo ./$(DEPDIR)/md4.Plo \
+ ./$(DEPDIR)/md5.Plo ./$(DEPDIR)/poly1305-s390x.Plo \
+ ./$(DEPDIR)/poly1305.Plo ./$(DEPDIR)/primegen.Plo \
+ ./$(DEPDIR)/pubkey-util.Plo ./$(DEPDIR)/pubkey.Plo \
+ ./$(DEPDIR)/rfc2268.Plo ./$(DEPDIR)/rijndael-aarch64.Plo \
+ ./$(DEPDIR)/rijndael-aesni.Plo ./$(DEPDIR)/rijndael-amd64.Plo \
+ ./$(DEPDIR)/rijndael-arm.Plo \
+ ./$(DEPDIR)/rijndael-armv8-aarch32-ce.Plo \
+ ./$(DEPDIR)/rijndael-armv8-aarch64-ce.Plo \
+ ./$(DEPDIR)/rijndael-armv8-ce.Plo \
+ ./$(DEPDIR)/rijndael-p10le.Plo \
+ ./$(DEPDIR)/rijndael-padlock.Plo ./$(DEPDIR)/rijndael-ppc.Plo \
+ ./$(DEPDIR)/rijndael-ppc9le.Plo ./$(DEPDIR)/rijndael-s390x.Plo \
+ ./$(DEPDIR)/rijndael-ssse3-amd64-asm.Plo \
+ ./$(DEPDIR)/rijndael-ssse3-amd64.Plo \
+ ./$(DEPDIR)/rijndael-vaes-avx2-amd64.Plo \
+ ./$(DEPDIR)/rijndael-vaes.Plo ./$(DEPDIR)/rijndael.Plo \
+ ./$(DEPDIR)/rmd160.Plo ./$(DEPDIR)/rsa-common.Plo \
+ ./$(DEPDIR)/rsa.Plo ./$(DEPDIR)/salsa20-amd64.Plo \
+ ./$(DEPDIR)/salsa20-armv7-neon.Plo ./$(DEPDIR)/salsa20.Plo \
+ ./$(DEPDIR)/scrypt.Plo ./$(DEPDIR)/seed.Plo \
+ ./$(DEPDIR)/serpent-armv7-neon.Plo \
+ ./$(DEPDIR)/serpent-avx2-amd64.Plo \
+ ./$(DEPDIR)/serpent-sse2-amd64.Plo ./$(DEPDIR)/serpent.Plo \
+ ./$(DEPDIR)/sha1-armv7-neon.Plo \
+ ./$(DEPDIR)/sha1-armv8-aarch32-ce.Plo \
+ ./$(DEPDIR)/sha1-armv8-aarch64-ce.Plo \
+ ./$(DEPDIR)/sha1-avx-amd64.Plo \
+ ./$(DEPDIR)/sha1-avx-bmi2-amd64.Plo \
+ ./$(DEPDIR)/sha1-avx2-bmi2-amd64.Plo \
+ ./$(DEPDIR)/sha1-intel-shaext.Plo \
+ ./$(DEPDIR)/sha1-ssse3-amd64.Plo ./$(DEPDIR)/sha1.Plo \
+ ./$(DEPDIR)/sha256-armv8-aarch32-ce.Plo \
+ ./$(DEPDIR)/sha256-armv8-aarch64-ce.Plo \
+ ./$(DEPDIR)/sha256-avx-amd64.Plo \
+ ./$(DEPDIR)/sha256-avx2-bmi2-amd64.Plo \
+ ./$(DEPDIR)/sha256-intel-shaext.Plo ./$(DEPDIR)/sha256-ppc.Plo \
+ ./$(DEPDIR)/sha256-ssse3-amd64.Plo ./$(DEPDIR)/sha256.Plo \
+ ./$(DEPDIR)/sha512-arm.Plo ./$(DEPDIR)/sha512-armv7-neon.Plo \
+ ./$(DEPDIR)/sha512-avx-amd64.Plo \
+ ./$(DEPDIR)/sha512-avx2-bmi2-amd64.Plo \
+ ./$(DEPDIR)/sha512-ppc.Plo ./$(DEPDIR)/sha512-ssse3-amd64.Plo \
+ ./$(DEPDIR)/sha512-ssse3-i386.Plo ./$(DEPDIR)/sha512.Plo \
+ ./$(DEPDIR)/sm3-aarch64.Plo ./$(DEPDIR)/sm3-avx-bmi2-amd64.Plo \
+ ./$(DEPDIR)/sm3.Plo ./$(DEPDIR)/sm4-aesni-avx-amd64.Plo \
+ ./$(DEPDIR)/sm4-aesni-avx2-amd64.Plo ./$(DEPDIR)/sm4.Plo \
+ ./$(DEPDIR)/stribog.Plo ./$(DEPDIR)/tiger.Plo \
+ ./$(DEPDIR)/twofish-aarch64.Plo ./$(DEPDIR)/twofish-amd64.Plo \
+ ./$(DEPDIR)/twofish-arm.Plo ./$(DEPDIR)/twofish-avx2-amd64.Plo \
+ ./$(DEPDIR)/twofish.Plo ./$(DEPDIR)/whirlpool-sse2-amd64.Plo \
+ ./$(DEPDIR)/whirlpool.Plo
+am__mv = mv -f
+CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
+LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CCASFLAGS) $(CCASFLAGS)
+AM_V_CPPAS = $(am__v_CPPAS_@AM_V@)
+am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@)
+am__v_CPPAS_0 = @echo " CPPAS " $@;
+am__v_CPPAS_1 =
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
+LTCCASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(AM_CCASFLAGS) \
+ $(CCASFLAGS)
+AM_V_CCAS = $(am__v_CCAS_@AM_V@)
+am__v_CCAS_ = $(am__v_CCAS_@AM_DEFAULT_V@)
+am__v_CCAS_0 = @echo " CCAS " $@;
+am__v_CCAS_1 =
+SOURCES = $(libcipher_la_SOURCES) $(EXTRA_libcipher_la_SOURCES)
+DIST_SOURCES = $(libcipher_la_SOURCES) $(EXTRA_libcipher_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Need to include ../src in addition to top_srcdir because gcrypt.h is
+# a built header.
+AM_CPPFLAGS = -I../src -I$(top_srcdir)/src -I../mpi -I$(top_srcdir)/mpi
+AM_CFLAGS = $(GPG_ERROR_CFLAGS)
+AM_CCASFLAGS = $(NOEXECSTACK_FLAGS)
+EXTRA_DIST = gost-s-box.c
+CLEANFILES = gost-s-box
+DISTCLEANFILES = gost-sb.h
+noinst_LTLIBRARIES = libcipher.la
+GCRYPT_MODULES = @GCRYPT_CIPHERS@ @GCRYPT_PUBKEY_CIPHERS@ \
+ @GCRYPT_DIGESTS@ @GCRYPT_KDFS@
+
+libcipher_la_DEPENDENCIES = $(GCRYPT_MODULES)
+libcipher_la_LIBADD = $(GCRYPT_MODULES)
+libcipher_la_SOURCES = \
+ cipher.c cipher-internal.h \
+ cipher-cbc.c \
+ cipher-cfb.c \
+ cipher-ofb.c \
+ cipher-ctr.c \
+ cipher-aeswrap.c \
+ cipher-ccm.c \
+ cipher-cmac.c \
+ cipher-gcm.c \
+ cipher-poly1305.c \
+ cipher-ocb.c \
+ cipher-xts.c \
+ cipher-eax.c \
+ cipher-siv.c \
+ cipher-gcm-siv.c \
+ cipher-selftest.c cipher-selftest.h \
+ pubkey.c pubkey-internal.h pubkey-util.c \
+ md.c \
+ mac.c mac-internal.h \
+ mac-hmac.c mac-cmac.c mac-gmac.c mac-poly1305.c \
+ poly1305.c poly1305-internal.h \
+ kdf.c kdf-internal.h \
+ bithelp.h \
+ bufhelp.h \
+ primegen.c \
+ hash-common.c hash-common.h \
+ dsa-common.c rsa-common.c \
+ sha1.h
+
+EXTRA_libcipher_la_SOURCES = \
+ asm-common-aarch64.h \
+ asm-common-amd64.h \
+ asm-common-s390x.h \
+ asm-inline-s390x.h \
+ asm-poly1305-aarch64.h \
+ asm-poly1305-amd64.h \
+ asm-poly1305-s390x.h \
+ arcfour.c arcfour-amd64.S \
+ blowfish.c blowfish-amd64.S blowfish-arm.S \
+ cast5.c cast5-amd64.S cast5-arm.S \
+ chacha20.c chacha20-amd64-ssse3.S chacha20-amd64-avx2.S \
+ chacha20-armv7-neon.S chacha20-aarch64.S \
+ chacha20-ppc.c chacha20-s390x.S \
+ cipher-gcm-ppc.c cipher-gcm-intel-pclmul.c cipher-gcm-armv7-neon.S \
+ cipher-gcm-armv8-aarch32-ce.S cipher-gcm-armv8-aarch64-ce.S \
+ crc.c crc-intel-pclmul.c crc-armv8-ce.c \
+ crc-armv8-aarch64-ce.S \
+ crc-ppc.c \
+ des.c des-amd64.S \
+ dsa.c \
+ elgamal.c \
+ ecc.c ecc-curves.c ecc-misc.c ecc-common.h \
+ ecc-ecdh.c ecc-ecdsa.c ecc-eddsa.c ecc-gost.c ecc-sm2.c \
+ idea.c \
+ gost28147.c gost.h \
+ gostr3411-94.c \
+ md4.c \
+ md5.c \
+ poly1305-s390x.S \
+ rijndael.c rijndael-internal.h rijndael-tables.h \
+ rijndael-aesni.c rijndael-padlock.c \
+ rijndael-amd64.S rijndael-arm.S \
+ rijndael-ssse3-amd64.c rijndael-ssse3-amd64-asm.S \
+ rijndael-vaes.c rijndael-vaes-avx2-amd64.S \
+ rijndael-armv8-ce.c rijndael-armv8-aarch32-ce.S \
+ rijndael-armv8-aarch64-ce.S rijndael-aarch64.S \
+ rijndael-ppc.c rijndael-ppc9le.c \
+ rijndael-p10le.c rijndael-gcm-p10le.s \
+ rijndael-ppc-common.h rijndael-ppc-functions.h \
+ rijndael-s390x.c \
+ rmd160.c \
+ rsa.c \
+ salsa20.c salsa20-amd64.S salsa20-armv7-neon.S \
+ scrypt.c \
+ seed.c \
+ serpent.c serpent-sse2-amd64.S \
+ sm4.c sm4-aesni-avx-amd64.S sm4-aesni-avx2-amd64.S \
+ serpent-avx2-amd64.S serpent-armv7-neon.S \
+ sha1.c sha1-ssse3-amd64.S sha1-avx-amd64.S sha1-avx-bmi2-amd64.S \
+ sha1-avx2-bmi2-amd64.S sha1-armv7-neon.S sha1-armv8-aarch32-ce.S \
+ sha1-armv8-aarch64-ce.S sha1-intel-shaext.c \
+ sha256.c sha256-ssse3-amd64.S sha256-avx-amd64.S \
+ sha256-avx2-bmi2-amd64.S \
+ sha256-armv8-aarch32-ce.S sha256-armv8-aarch64-ce.S \
+ sha256-intel-shaext.c sha256-ppc.c \
+ sha512.c sha512-ssse3-amd64.S sha512-avx-amd64.S \
+ sha512-avx2-bmi2-amd64.S \
+ sha512-armv7-neon.S sha512-arm.S \
+ sha512-ppc.c sha512-ssse3-i386.c \
+ sm3.c sm3-avx-bmi2-amd64.S sm3-aarch64.S \
+ keccak.c keccak_permute_32.h keccak_permute_64.h keccak-armv7-neon.S \
+ stribog.c \
+ tiger.c \
+ whirlpool.c whirlpool-sse2-amd64.S \
+ twofish.c twofish-amd64.S twofish-arm.S twofish-aarch64.S \
+ twofish-avx2-amd64.S \
+ rfc2268.c \
+ camellia.c camellia.h camellia-glue.c camellia-aesni-avx-amd64.S \
+ camellia-aesni-avx2-amd64.h camellia-vaes-avx2-amd64.S \
+ camellia-aesni-avx2-amd64.S camellia-arm.S camellia-aarch64.S \
+ blake2.c \
+ blake2b-amd64-avx2.S blake2s-amd64-avx.S
+
+@ENABLE_O_FLAG_MUNGING_FALSE@o_flag_munging = cat
+@ENABLE_O_FLAG_MUNGING_TRUE@o_flag_munging = sed -e 's/-O\([2-9sgz][2-9sgz]*\)/-O1/' -e 's/-Ofast/-O1/g'
+@ENABLE_INSTRUMENTATION_MUNGING_FALSE@instrumentation_munging = cat
+
+# We need to disable instrumentation for these modules as they use cc as
+# thin assembly front-end and do not tolerate in-between function calls
+# inserted by compiler as those functions may clobber the XMM registers.
+@ENABLE_INSTRUMENTATION_MUNGING_TRUE@instrumentation_munging = sed \
+@ENABLE_INSTRUMENTATION_MUNGING_TRUE@ -e 's/-fsanitize[=,\-][=,a-z,A-Z,0-9,\,,\-]*//g' \
+@ENABLE_INSTRUMENTATION_MUNGING_TRUE@ -e 's/-fprofile[=,\-][=,a-z,A-Z,0-9,\,,\-]*//g' \
+@ENABLE_INSTRUMENTATION_MUNGING_TRUE@ -e 's/-fcoverage[=,\-][=,a-z,A-Z,0-9,\,,\-]*//g'
+
+@ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_FALSE@ppc_vcrypto_cflags =
+@ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_TRUE@ppc_vcrypto_cflags = -maltivec -mvsx -mcrypto
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .obj .s
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cipher/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu cipher/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libcipher.la: $(libcipher_la_OBJECTS) $(libcipher_la_DEPENDENCIES) $(EXTRA_libcipher_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libcipher_la_OBJECTS) $(libcipher_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arcfour-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arcfour.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blake2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blake2b-amd64-avx2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blake2s-amd64-avx.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blowfish-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blowfish-arm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blowfish.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia-aarch64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia-aesni-avx-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia-aesni-avx2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia-arm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia-glue.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia-vaes-avx2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cast5-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cast5-arm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cast5.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chacha20-aarch64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chacha20-amd64-avx2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chacha20-amd64-ssse3.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chacha20-armv7-neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chacha20-ppc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chacha20-s390x.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chacha20.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-aeswrap.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-cbc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-ccm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-cfb.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-cmac.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-ctr.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-eax.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-gcm-armv7-neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-gcm-armv8-aarch32-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-gcm-armv8-aarch64-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-gcm-intel-pclmul.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-gcm-ppc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-gcm-siv.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-gcm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-ocb.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-ofb.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-poly1305.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-selftest.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-siv.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher-xts.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc-armv8-aarch64-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc-armv8-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc-intel-pclmul.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc-ppc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/des-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/des.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsa-common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsa.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc-curves.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc-ecdh.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc-ecdsa.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc-eddsa.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc-gost.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc-misc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc-sm2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elgamal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gost28147.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gostr3411-94.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idea.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keccak-armv7-neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keccak.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mac-cmac.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mac-gmac.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mac-hmac.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mac-poly1305.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mac.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md4.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly1305-s390x.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly1305.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primegen.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pubkey-util.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pubkey.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfc2268.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-aarch64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-aesni.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-arm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-armv8-aarch32-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-armv8-aarch64-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-armv8-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-p10le.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-padlock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-ppc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-ppc9le.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-s390x.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-ssse3-amd64-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-ssse3-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-vaes-avx2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-vaes.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmd160.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsa-common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsa.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/salsa20-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/salsa20-armv7-neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/salsa20.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scrypt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seed.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serpent-armv7-neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serpent-avx2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serpent-sse2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serpent.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-armv7-neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-armv8-aarch32-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-armv8-aarch64-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-avx-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-avx-bmi2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-avx2-bmi2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-intel-shaext.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1-ssse3-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256-armv8-aarch32-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256-armv8-aarch64-ce.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256-avx-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256-avx2-bmi2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256-intel-shaext.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256-ppc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256-ssse3-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512-arm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512-armv7-neon.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512-avx-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512-avx2-bmi2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512-ppc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512-ssse3-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512-ssse3-i386.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sm3-aarch64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sm3-avx-bmi2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sm3.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sm4-aesni-avx-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sm4-aesni-avx2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sm4.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stribog.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiger.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twofish-aarch64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twofish-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twofish-arm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twofish-avx2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twofish.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/whirlpool-sse2-amd64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/whirlpool.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.S.o:
+@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $<
+
+.S.obj:
+@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.S.lo:
+@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@ $<
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.s.o:
+ $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $<
+
+.s.obj:
+ $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.s.lo:
+ $(AM_V_CCAS)$(LTCCASCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/arcfour-amd64.Plo
+ -rm -f ./$(DEPDIR)/arcfour.Plo
+ -rm -f ./$(DEPDIR)/blake2.Plo
+ -rm -f ./$(DEPDIR)/blake2b-amd64-avx2.Plo
+ -rm -f ./$(DEPDIR)/blake2s-amd64-avx.Plo
+ -rm -f ./$(DEPDIR)/blowfish-amd64.Plo
+ -rm -f ./$(DEPDIR)/blowfish-arm.Plo
+ -rm -f ./$(DEPDIR)/blowfish.Plo
+ -rm -f ./$(DEPDIR)/camellia-aarch64.Plo
+ -rm -f ./$(DEPDIR)/camellia-aesni-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/camellia-aesni-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/camellia-arm.Plo
+ -rm -f ./$(DEPDIR)/camellia-glue.Plo
+ -rm -f ./$(DEPDIR)/camellia-vaes-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/camellia.Plo
+ -rm -f ./$(DEPDIR)/cast5-amd64.Plo
+ -rm -f ./$(DEPDIR)/cast5-arm.Plo
+ -rm -f ./$(DEPDIR)/cast5.Plo
+ -rm -f ./$(DEPDIR)/chacha20-aarch64.Plo
+ -rm -f ./$(DEPDIR)/chacha20-amd64-avx2.Plo
+ -rm -f ./$(DEPDIR)/chacha20-amd64-ssse3.Plo
+ -rm -f ./$(DEPDIR)/chacha20-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/chacha20-ppc.Plo
+ -rm -f ./$(DEPDIR)/chacha20-s390x.Plo
+ -rm -f ./$(DEPDIR)/chacha20.Plo
+ -rm -f ./$(DEPDIR)/cipher-aeswrap.Plo
+ -rm -f ./$(DEPDIR)/cipher-cbc.Plo
+ -rm -f ./$(DEPDIR)/cipher-ccm.Plo
+ -rm -f ./$(DEPDIR)/cipher-cfb.Plo
+ -rm -f ./$(DEPDIR)/cipher-cmac.Plo
+ -rm -f ./$(DEPDIR)/cipher-ctr.Plo
+ -rm -f ./$(DEPDIR)/cipher-eax.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-intel-pclmul.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-ppc.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-siv.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm.Plo
+ -rm -f ./$(DEPDIR)/cipher-ocb.Plo
+ -rm -f ./$(DEPDIR)/cipher-ofb.Plo
+ -rm -f ./$(DEPDIR)/cipher-poly1305.Plo
+ -rm -f ./$(DEPDIR)/cipher-selftest.Plo
+ -rm -f ./$(DEPDIR)/cipher-siv.Plo
+ -rm -f ./$(DEPDIR)/cipher-xts.Plo
+ -rm -f ./$(DEPDIR)/cipher.Plo
+ -rm -f ./$(DEPDIR)/crc-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/crc-armv8-ce.Plo
+ -rm -f ./$(DEPDIR)/crc-intel-pclmul.Plo
+ -rm -f ./$(DEPDIR)/crc-ppc.Plo
+ -rm -f ./$(DEPDIR)/crc.Plo
+ -rm -f ./$(DEPDIR)/des-amd64.Plo
+ -rm -f ./$(DEPDIR)/des.Plo
+ -rm -f ./$(DEPDIR)/dsa-common.Plo
+ -rm -f ./$(DEPDIR)/dsa.Plo
+ -rm -f ./$(DEPDIR)/ecc-curves.Plo
+ -rm -f ./$(DEPDIR)/ecc-ecdh.Plo
+ -rm -f ./$(DEPDIR)/ecc-ecdsa.Plo
+ -rm -f ./$(DEPDIR)/ecc-eddsa.Plo
+ -rm -f ./$(DEPDIR)/ecc-gost.Plo
+ -rm -f ./$(DEPDIR)/ecc-misc.Plo
+ -rm -f ./$(DEPDIR)/ecc-sm2.Plo
+ -rm -f ./$(DEPDIR)/ecc.Plo
+ -rm -f ./$(DEPDIR)/elgamal.Plo
+ -rm -f ./$(DEPDIR)/gost28147.Plo
+ -rm -f ./$(DEPDIR)/gostr3411-94.Plo
+ -rm -f ./$(DEPDIR)/hash-common.Plo
+ -rm -f ./$(DEPDIR)/idea.Plo
+ -rm -f ./$(DEPDIR)/kdf.Plo
+ -rm -f ./$(DEPDIR)/keccak-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/keccak.Plo
+ -rm -f ./$(DEPDIR)/mac-cmac.Plo
+ -rm -f ./$(DEPDIR)/mac-gmac.Plo
+ -rm -f ./$(DEPDIR)/mac-hmac.Plo
+ -rm -f ./$(DEPDIR)/mac-poly1305.Plo
+ -rm -f ./$(DEPDIR)/mac.Plo
+ -rm -f ./$(DEPDIR)/md.Plo
+ -rm -f ./$(DEPDIR)/md4.Plo
+ -rm -f ./$(DEPDIR)/md5.Plo
+ -rm -f ./$(DEPDIR)/poly1305-s390x.Plo
+ -rm -f ./$(DEPDIR)/poly1305.Plo
+ -rm -f ./$(DEPDIR)/primegen.Plo
+ -rm -f ./$(DEPDIR)/pubkey-util.Plo
+ -rm -f ./$(DEPDIR)/pubkey.Plo
+ -rm -f ./$(DEPDIR)/rfc2268.Plo
+ -rm -f ./$(DEPDIR)/rijndael-aarch64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-aesni.Plo
+ -rm -f ./$(DEPDIR)/rijndael-amd64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-arm.Plo
+ -rm -f ./$(DEPDIR)/rijndael-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/rijndael-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/rijndael-armv8-ce.Plo
+ -rm -f ./$(DEPDIR)/rijndael-p10le.Plo
+ -rm -f ./$(DEPDIR)/rijndael-padlock.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ppc.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ppc9le.Plo
+ -rm -f ./$(DEPDIR)/rijndael-s390x.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ssse3-amd64-asm.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-vaes-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-vaes.Plo
+ -rm -f ./$(DEPDIR)/rijndael.Plo
+ -rm -f ./$(DEPDIR)/rmd160.Plo
+ -rm -f ./$(DEPDIR)/rsa-common.Plo
+ -rm -f ./$(DEPDIR)/rsa.Plo
+ -rm -f ./$(DEPDIR)/salsa20-amd64.Plo
+ -rm -f ./$(DEPDIR)/salsa20-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/salsa20.Plo
+ -rm -f ./$(DEPDIR)/scrypt.Plo
+ -rm -f ./$(DEPDIR)/seed.Plo
+ -rm -f ./$(DEPDIR)/serpent-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/serpent-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/serpent-sse2-amd64.Plo
+ -rm -f ./$(DEPDIR)/serpent.Plo
+ -rm -f ./$(DEPDIR)/sha1-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/sha1-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/sha1-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/sha1-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1-avx-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1-avx2-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1-intel-shaext.Plo
+ -rm -f ./$(DEPDIR)/sha1-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1.Plo
+ -rm -f ./$(DEPDIR)/sha256-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/sha256-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/sha256-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha256-avx2-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha256-intel-shaext.Plo
+ -rm -f ./$(DEPDIR)/sha256-ppc.Plo
+ -rm -f ./$(DEPDIR)/sha256-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha256.Plo
+ -rm -f ./$(DEPDIR)/sha512-arm.Plo
+ -rm -f ./$(DEPDIR)/sha512-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/sha512-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha512-avx2-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha512-ppc.Plo
+ -rm -f ./$(DEPDIR)/sha512-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha512-ssse3-i386.Plo
+ -rm -f ./$(DEPDIR)/sha512.Plo
+ -rm -f ./$(DEPDIR)/sm3-aarch64.Plo
+ -rm -f ./$(DEPDIR)/sm3-avx-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sm3.Plo
+ -rm -f ./$(DEPDIR)/sm4-aesni-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sm4-aesni-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sm4.Plo
+ -rm -f ./$(DEPDIR)/stribog.Plo
+ -rm -f ./$(DEPDIR)/tiger.Plo
+ -rm -f ./$(DEPDIR)/twofish-aarch64.Plo
+ -rm -f ./$(DEPDIR)/twofish-amd64.Plo
+ -rm -f ./$(DEPDIR)/twofish-arm.Plo
+ -rm -f ./$(DEPDIR)/twofish-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/twofish.Plo
+ -rm -f ./$(DEPDIR)/whirlpool-sse2-amd64.Plo
+ -rm -f ./$(DEPDIR)/whirlpool.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/arcfour-amd64.Plo
+ -rm -f ./$(DEPDIR)/arcfour.Plo
+ -rm -f ./$(DEPDIR)/blake2.Plo
+ -rm -f ./$(DEPDIR)/blake2b-amd64-avx2.Plo
+ -rm -f ./$(DEPDIR)/blake2s-amd64-avx.Plo
+ -rm -f ./$(DEPDIR)/blowfish-amd64.Plo
+ -rm -f ./$(DEPDIR)/blowfish-arm.Plo
+ -rm -f ./$(DEPDIR)/blowfish.Plo
+ -rm -f ./$(DEPDIR)/camellia-aarch64.Plo
+ -rm -f ./$(DEPDIR)/camellia-aesni-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/camellia-aesni-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/camellia-arm.Plo
+ -rm -f ./$(DEPDIR)/camellia-glue.Plo
+ -rm -f ./$(DEPDIR)/camellia-vaes-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/camellia.Plo
+ -rm -f ./$(DEPDIR)/cast5-amd64.Plo
+ -rm -f ./$(DEPDIR)/cast5-arm.Plo
+ -rm -f ./$(DEPDIR)/cast5.Plo
+ -rm -f ./$(DEPDIR)/chacha20-aarch64.Plo
+ -rm -f ./$(DEPDIR)/chacha20-amd64-avx2.Plo
+ -rm -f ./$(DEPDIR)/chacha20-amd64-ssse3.Plo
+ -rm -f ./$(DEPDIR)/chacha20-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/chacha20-ppc.Plo
+ -rm -f ./$(DEPDIR)/chacha20-s390x.Plo
+ -rm -f ./$(DEPDIR)/chacha20.Plo
+ -rm -f ./$(DEPDIR)/cipher-aeswrap.Plo
+ -rm -f ./$(DEPDIR)/cipher-cbc.Plo
+ -rm -f ./$(DEPDIR)/cipher-ccm.Plo
+ -rm -f ./$(DEPDIR)/cipher-cfb.Plo
+ -rm -f ./$(DEPDIR)/cipher-cmac.Plo
+ -rm -f ./$(DEPDIR)/cipher-ctr.Plo
+ -rm -f ./$(DEPDIR)/cipher-eax.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-intel-pclmul.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-ppc.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm-siv.Plo
+ -rm -f ./$(DEPDIR)/cipher-gcm.Plo
+ -rm -f ./$(DEPDIR)/cipher-ocb.Plo
+ -rm -f ./$(DEPDIR)/cipher-ofb.Plo
+ -rm -f ./$(DEPDIR)/cipher-poly1305.Plo
+ -rm -f ./$(DEPDIR)/cipher-selftest.Plo
+ -rm -f ./$(DEPDIR)/cipher-siv.Plo
+ -rm -f ./$(DEPDIR)/cipher-xts.Plo
+ -rm -f ./$(DEPDIR)/cipher.Plo
+ -rm -f ./$(DEPDIR)/crc-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/crc-armv8-ce.Plo
+ -rm -f ./$(DEPDIR)/crc-intel-pclmul.Plo
+ -rm -f ./$(DEPDIR)/crc-ppc.Plo
+ -rm -f ./$(DEPDIR)/crc.Plo
+ -rm -f ./$(DEPDIR)/des-amd64.Plo
+ -rm -f ./$(DEPDIR)/des.Plo
+ -rm -f ./$(DEPDIR)/dsa-common.Plo
+ -rm -f ./$(DEPDIR)/dsa.Plo
+ -rm -f ./$(DEPDIR)/ecc-curves.Plo
+ -rm -f ./$(DEPDIR)/ecc-ecdh.Plo
+ -rm -f ./$(DEPDIR)/ecc-ecdsa.Plo
+ -rm -f ./$(DEPDIR)/ecc-eddsa.Plo
+ -rm -f ./$(DEPDIR)/ecc-gost.Plo
+ -rm -f ./$(DEPDIR)/ecc-misc.Plo
+ -rm -f ./$(DEPDIR)/ecc-sm2.Plo
+ -rm -f ./$(DEPDIR)/ecc.Plo
+ -rm -f ./$(DEPDIR)/elgamal.Plo
+ -rm -f ./$(DEPDIR)/gost28147.Plo
+ -rm -f ./$(DEPDIR)/gostr3411-94.Plo
+ -rm -f ./$(DEPDIR)/hash-common.Plo
+ -rm -f ./$(DEPDIR)/idea.Plo
+ -rm -f ./$(DEPDIR)/kdf.Plo
+ -rm -f ./$(DEPDIR)/keccak-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/keccak.Plo
+ -rm -f ./$(DEPDIR)/mac-cmac.Plo
+ -rm -f ./$(DEPDIR)/mac-gmac.Plo
+ -rm -f ./$(DEPDIR)/mac-hmac.Plo
+ -rm -f ./$(DEPDIR)/mac-poly1305.Plo
+ -rm -f ./$(DEPDIR)/mac.Plo
+ -rm -f ./$(DEPDIR)/md.Plo
+ -rm -f ./$(DEPDIR)/md4.Plo
+ -rm -f ./$(DEPDIR)/md5.Plo
+ -rm -f ./$(DEPDIR)/poly1305-s390x.Plo
+ -rm -f ./$(DEPDIR)/poly1305.Plo
+ -rm -f ./$(DEPDIR)/primegen.Plo
+ -rm -f ./$(DEPDIR)/pubkey-util.Plo
+ -rm -f ./$(DEPDIR)/pubkey.Plo
+ -rm -f ./$(DEPDIR)/rfc2268.Plo
+ -rm -f ./$(DEPDIR)/rijndael-aarch64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-aesni.Plo
+ -rm -f ./$(DEPDIR)/rijndael-amd64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-arm.Plo
+ -rm -f ./$(DEPDIR)/rijndael-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/rijndael-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/rijndael-armv8-ce.Plo
+ -rm -f ./$(DEPDIR)/rijndael-p10le.Plo
+ -rm -f ./$(DEPDIR)/rijndael-padlock.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ppc.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ppc9le.Plo
+ -rm -f ./$(DEPDIR)/rijndael-s390x.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ssse3-amd64-asm.Plo
+ -rm -f ./$(DEPDIR)/rijndael-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-vaes-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/rijndael-vaes.Plo
+ -rm -f ./$(DEPDIR)/rijndael.Plo
+ -rm -f ./$(DEPDIR)/rmd160.Plo
+ -rm -f ./$(DEPDIR)/rsa-common.Plo
+ -rm -f ./$(DEPDIR)/rsa.Plo
+ -rm -f ./$(DEPDIR)/salsa20-amd64.Plo
+ -rm -f ./$(DEPDIR)/salsa20-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/salsa20.Plo
+ -rm -f ./$(DEPDIR)/scrypt.Plo
+ -rm -f ./$(DEPDIR)/seed.Plo
+ -rm -f ./$(DEPDIR)/serpent-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/serpent-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/serpent-sse2-amd64.Plo
+ -rm -f ./$(DEPDIR)/serpent.Plo
+ -rm -f ./$(DEPDIR)/sha1-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/sha1-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/sha1-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/sha1-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1-avx-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1-avx2-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1-intel-shaext.Plo
+ -rm -f ./$(DEPDIR)/sha1-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha1.Plo
+ -rm -f ./$(DEPDIR)/sha256-armv8-aarch32-ce.Plo
+ -rm -f ./$(DEPDIR)/sha256-armv8-aarch64-ce.Plo
+ -rm -f ./$(DEPDIR)/sha256-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha256-avx2-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha256-intel-shaext.Plo
+ -rm -f ./$(DEPDIR)/sha256-ppc.Plo
+ -rm -f ./$(DEPDIR)/sha256-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha256.Plo
+ -rm -f ./$(DEPDIR)/sha512-arm.Plo
+ -rm -f ./$(DEPDIR)/sha512-armv7-neon.Plo
+ -rm -f ./$(DEPDIR)/sha512-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha512-avx2-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha512-ppc.Plo
+ -rm -f ./$(DEPDIR)/sha512-ssse3-amd64.Plo
+ -rm -f ./$(DEPDIR)/sha512-ssse3-i386.Plo
+ -rm -f ./$(DEPDIR)/sha512.Plo
+ -rm -f ./$(DEPDIR)/sm3-aarch64.Plo
+ -rm -f ./$(DEPDIR)/sm3-avx-bmi2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sm3.Plo
+ -rm -f ./$(DEPDIR)/sm4-aesni-avx-amd64.Plo
+ -rm -f ./$(DEPDIR)/sm4-aesni-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/sm4.Plo
+ -rm -f ./$(DEPDIR)/stribog.Plo
+ -rm -f ./$(DEPDIR)/tiger.Plo
+ -rm -f ./$(DEPDIR)/twofish-aarch64.Plo
+ -rm -f ./$(DEPDIR)/twofish-amd64.Plo
+ -rm -f ./$(DEPDIR)/twofish-arm.Plo
+ -rm -f ./$(DEPDIR)/twofish-avx2-amd64.Plo
+ -rm -f ./$(DEPDIR)/twofish.Plo
+ -rm -f ./$(DEPDIR)/whirlpool-sse2-amd64.Plo
+ -rm -f ./$(DEPDIR)/whirlpool.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+gost28147.lo: gost-sb.h
+gost-sb.h: gost-s-box
+ ./gost-s-box $@
+
+gost-s-box: gost-s-box.c
+ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) \
+ $(CPPFLAGS_FOR_BUILD) -o $@ $(srcdir)/gost-s-box.c
+
+# We need to lower the optimization for this module.
+tiger.o: $(srcdir)/tiger.c Makefile
+ `echo $(COMPILE) -c $< | $(o_flag_munging) `
+
+tiger.lo: $(srcdir)/tiger.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(o_flag_munging) `
+
+rijndael-aesni.o: $(srcdir)/rijndael-aesni.c Makefile
+ `echo $(COMPILE) -c $< | $(instrumentation_munging) `
+
+rijndael-aesni.lo: $(srcdir)/rijndael-aesni.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(instrumentation_munging) `
+
+rijndael-ssse3-amd64.o: $(srcdir)/rijndael-ssse3-amd64.c Makefile
+ `echo $(COMPILE) -c $< | $(instrumentation_munging) `
+
+rijndael-ssse3-amd64.lo: $(srcdir)/rijndael-ssse3-amd64.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(instrumentation_munging) `
+
+cipher-gcm-intel-pclmul.o: $(srcdir)/cipher-gcm-intel-pclmul.c Makefile
+ `echo $(COMPILE) -c $< | $(instrumentation_munging) `
+
+cipher-gcm-intel-pclmul.lo: $(srcdir)/cipher-gcm-intel-pclmul.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(instrumentation_munging) `
+
+sha1-intel-shaext.o: $(srcdir)/sha1-intel-shaext.c Makefile
+ `echo $(COMPILE) -c $< | $(instrumentation_munging) `
+
+sha1-intel-shaext.lo: $(srcdir)/sha1-intel-shaext.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(instrumentation_munging) `
+
+sha256-intel-shaext.o: $(srcdir)/sha256-intel-shaext.c Makefile
+ `echo $(COMPILE) -c $< | $(instrumentation_munging) `
+
+sha256-intel-shaext.lo: $(srcdir)/sha256-intel-shaext.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(instrumentation_munging) `
+
+sha256-ssse3-i386.o: $(srcdir)/sha256-ssse3-i386.c Makefile
+ `echo $(COMPILE) -c $< | $(instrumentation_munging) `
+
+sha256-ssse3-i386.lo: $(srcdir)/sha256-ssse3-i386.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(instrumentation_munging) `
+
+crc-intel-pclmul.o: $(srcdir)/crc-intel-pclmul.c Makefile
+ `echo $(COMPILE) -c $< | $(instrumentation_munging) `
+
+crc-intel-pclmul.lo: $(srcdir)/crc-intel-pclmul.c Makefile
+ `echo $(LTCOMPILE) -c $< | $(instrumentation_munging) `
+
+rijndael-ppc.o: $(srcdir)/rijndael-ppc.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+rijndael-ppc.lo: $(srcdir)/rijndael-ppc.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+rijndael-ppc9le.o: $(srcdir)/rijndael-ppc9le.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+rijndael-ppc9le.lo: $(srcdir)/rijndael-ppc9le.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+rijndael-p10le.o: $(srcdir)/rijndael-p10le.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+rijndael-p10le.lo: $(srcdir)/rijndael-p10le.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+sha256-ppc.o: $(srcdir)/sha256-ppc.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+sha256-ppc.lo: $(srcdir)/sha256-ppc.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+sha512-ppc.o: $(srcdir)/sha512-ppc.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+sha512-ppc.lo: $(srcdir)/sha512-ppc.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+chacha20-ppc.o: $(srcdir)/chacha20-ppc.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+chacha20-ppc.lo: $(srcdir)/chacha20-ppc.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+crc-ppc.o: $(srcdir)/crc-ppc.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+crc-ppc.lo: $(srcdir)/crc-ppc.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+cipher-gcm-ppc.o: $(srcdir)/cipher-gcm-ppc.c Makefile
+ `echo $(COMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+cipher-gcm-ppc.lo: $(srcdir)/cipher-gcm-ppc.c Makefile
+ `echo $(LTCOMPILE) $(ppc_vcrypto_cflags) -c $< | $(instrumentation_munging) `
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
memcpy (output, ctx.buf, outputlen);
else
{
- int r = (outputlen-1)/32;
+ int r = (outputlen-1)/32 - 1;
unsigned int remained = outputlen - 32*r;
int i;
unsigned char d[64];
blake2b_final (&ctx);
}
- if (remained)
- memcpy ((unsigned char *)output+r*32, d+32, remained);
+ ec = blake2b_init_ctx (&ctx, 0, NULL, 0, remained*8);
+ if (ec)
+ return ec;
+
+ blake2b_write (&ctx, d, 64);
+ blake2b_final (&ctx);
+
+ memcpy ((unsigned char *)output+r*32, ctx.buf, remained);
}
wipememory (buf, sizeof (buf));
#include "g10lib.h"
#include "bithelp.h"
+#include "const-time.h"
#undef BUFHELP_UNALIGNED_ACCESS
/* Constant-time compare of two buffers. Returns 1 if buffers are equal,
and 0 if buffers differ. */
static inline int
-buf_eq_const(const void *_a, const void *_b, size_t len)
+buf_eq_const(const void *a, const void *b, size_t len)
{
- const byte *a = _a;
- const byte *b = _b;
- int ab, ba;
- size_t i;
-
- /* Constant-time compare. */
- for (i = 0, ab = 0, ba = 0; i < len; i++)
- {
- /* If a[i] != b[i], either ab or ba will be negative. */
- ab |= a[i] - b[i];
- ba |= b[i] - a[i];
- }
-
- /* 'ab | ba' is negative when buffers are not equal. */
- return (ab | ba) >= 0;
+ return ct_memequal (a, b, len);
}
return GPG_ERR_INV_LENGTH;
}
+#ifdef USE_CHACHA20
if (LIKELY(inbuflen > 0) && LIKELY(c->spec->algo == GCRY_CIPHER_CHACHA20))
{
return _gcry_chacha20_poly1305_encrypt (c, outbuf, inbuf, inbuflen);
}
+#endif
while (inbuflen)
{
return GPG_ERR_INV_LENGTH;
}
+#ifdef USE_CHACHA20
if (LIKELY(inbuflen > 0) && LIKELY(c->spec->algo == GCRY_CIPHER_CHACHA20))
{
return _gcry_chacha20_poly1305_decrypt (c, outbuf, inbuf, inbuflen);
}
+#endif
while (inbuflen)
{
{
gcry_mpi_t a;
unsigned char *digest;
+ int b;
+
+ b = (ec->nbits+7)/8;
+ if (ec->nbits == 255)
+ ;
+ else if (ec->nbits == 448)
+ b++;
+ else
+ return NULL; /* Not implemented. */
if (_gcry_ecc_eddsa_compute_h_d (&digest, ec))
return NULL;
a = mpi_snew (0);
- _gcry_mpi_set_buffer (a, digest, 32, 0);
+ _gcry_mpi_set_buffer (a, digest, b, 0);
xfree (digest);
/* And finally the public key. */
\f
/* Local prototypes. */
static void test_keys (mpi_ec_t ec, unsigned int nbits);
+static int test_keys_fips (gcry_sexp_t skey);
static void test_ecdh_only_keys (mpi_ec_t ec, unsigned int nbits, int flags);
static unsigned int ecc_get_nbits (gcry_sexp_t parms);
; /* User requested to skip the test. */
else if (ec->model == MPI_EC_MONTGOMERY)
test_ecdh_only_keys (ec, ec->nbits - 63, flags);
- else
+ else if (!fips_mode ())
test_keys (ec, ec->nbits - 64);
return 0;
mpi_free (test);
}
+/* We should get here only with the NIST curves as they are the only ones
+ * having the fips bit set in ecc_domain_parms_t struct so this is slightly
+ * simpler than the whole ecc_generate function */
+static int
+test_keys_fips (gcry_sexp_t skey)
+{
+ int result = -1; /* Default to failure */
+ gcry_md_hd_t hd = NULL;
+ const char *data_tmpl = "(data (flags rfc6979) (hash %s %b))";
+ gcry_sexp_t sig = NULL;
+ char plaintext[128];
+ int rc;
+
+ /* Create a random plaintext. */
+ _gcry_randomize (plaintext, sizeof plaintext, GCRY_WEAK_RANDOM);
+
+ /* Open MD context and feed the random data in */
+ rc = _gcry_md_open (&hd, GCRY_MD_SHA256, 0);
+ if (rc)
+ {
+ log_error ("ECDSA operation: failed to initialize MD context: %s\n", gpg_strerror (rc));
+ goto leave;
+ }
+ _gcry_md_write (hd, plaintext, sizeof(plaintext));
+
+ /* Sign the data */
+ rc = _gcry_pk_sign_md (&sig, data_tmpl, hd, skey, NULL);
+ if (rc)
+ {
+ log_error ("ECDSA operation: signing failed: %s\n", gpg_strerror (rc));
+ goto leave;
+ }
+
+ /* Verify this signature. */
+ rc = _gcry_pk_verify_md (sig, data_tmpl, hd, skey, NULL);
+ if (rc)
+ {
+ log_error ("ECDSA operation: verification failed: %s\n", gpg_strerror (rc));
+ goto leave;
+ }
+
+ /* Modify the data and check that the signing fails. */
+ _gcry_md_reset(hd);
+ plaintext[sizeof plaintext / 2] ^= 1;
+ _gcry_md_write (hd, plaintext, sizeof(plaintext));
+ rc = _gcry_pk_verify_md (sig, data_tmpl, hd, skey, NULL);
+ if (rc != GPG_ERR_BAD_SIGNATURE)
+ {
+ log_error ("ECDSA operation: signature verification worked on modified data\n");
+ goto leave;
+ }
+
+ result = 0;
+leave:
+ _gcry_md_close (hd);
+ sexp_release (sig);
+ return result;
+}
+
static void
test_ecdh_only_keys (mpi_ec_t ec, unsigned int nbits, int flags)
log_debug ("ecgen result using Ed25519+EdDSA\n");
}
+ if (fips_mode () && test_keys_fips (*r_skey))
+ {
+ sexp_release (*r_skey);
+ *r_skey = NULL;
+ fips_signal_error ("self-test after key generation failed");
+ rc = GPG_ERR_SELFTEST_FAILED;
+ }
+
leave:
mpi_free (public);
mpi_free (base);
Self-test section.
*/
+static const char *
+selftest_hash_sign (gcry_sexp_t pkey, gcry_sexp_t skey)
+{
+ int md_algo = GCRY_MD_SHA256;
+ gcry_md_hd_t hd = NULL;
+ const char *data_tmpl = "(data (flags rfc6979) (hash %s %b))";
+ /* Sample data from RFC 6979 section A.2.5, hash is of message "sample" */
+ static const char sample_data[] = "sample";
+ static const char sample_data_bad[] = "sbmple";
+ static const char signature_r[] =
+ "efd48b2aacb6a8fd1140dd9cd45e81d69d2c877b56aaf991c34d0ea84eaf3716";
+ static const char signature_s[] =
+ "f7cb1c942d657c41d436c7a1b6e29f65f3e900dbb9aff4064dc4ab2f843acda8";
+
+ const char *errtxt = NULL;
+ gcry_error_t err;
+ gcry_sexp_t sig = NULL;
+ gcry_sexp_t l1 = NULL;
+ gcry_sexp_t l2 = NULL;
+ gcry_mpi_t r = NULL;
+ gcry_mpi_t s = NULL;
+ gcry_mpi_t calculated_r = NULL;
+ gcry_mpi_t calculated_s = NULL;
+ int cmp;
+
+ err = _gcry_md_open (&hd, md_algo, 0);
+ if (err)
+ {
+ errtxt = "gcry_md_open failed";
+ goto leave;
+ }
+
+ _gcry_md_write (hd, sample_data, strlen(sample_data));
+
+ err = _gcry_mpi_scan (&r, GCRYMPI_FMT_HEX, signature_r, 0, NULL);
+ if (!err)
+ err = _gcry_mpi_scan (&s, GCRYMPI_FMT_HEX, signature_s, 0, NULL);
+
+ if (err)
+ {
+ errtxt = "converting data failed";
+ goto leave;
+ }
+
+ err = _gcry_pk_sign_md (&sig, data_tmpl, hd, skey, NULL);
+ if (err)
+ {
+ errtxt = "signing failed";
+ goto leave;
+ }
+
+ /* check against known signature */
+ errtxt = "signature validity failed";
+ l1 = _gcry_sexp_find_token (sig, "sig-val", 0);
+ if (!l1)
+ goto leave;
+ l2 = _gcry_sexp_find_token (l1, "ecdsa", 0);
+ if (!l2)
+ goto leave;
+
+ sexp_release (l1);
+ l1 = l2;
+
+ l2 = _gcry_sexp_find_token (l1, "r", 0);
+ if (!l2)
+ goto leave;
+ calculated_r = _gcry_sexp_nth_mpi (l2, 1, GCRYMPI_FMT_USG);
+ if (!calculated_r)
+ goto leave;
+
+ sexp_release (l2);
+ l2 = _gcry_sexp_find_token (l1, "s", 0);
+ if (!l2)
+ goto leave;
+ calculated_s = _gcry_sexp_nth_mpi (l2, 1, GCRYMPI_FMT_USG);
+ if (!calculated_s)
+ goto leave;
+
+ errtxt = "known sig check failed";
+
+ cmp = _gcry_mpi_cmp (r, calculated_r);
+ if (cmp)
+ goto leave;
+ cmp = _gcry_mpi_cmp (s, calculated_s);
+ if (cmp)
+ goto leave;
+
+ errtxt = NULL;
+
+ /* verify generated signature */
+ err = _gcry_pk_verify_md (sig, data_tmpl, hd, pkey, NULL);
+ if (err)
+ {
+ errtxt = "verify failed";
+ goto leave;
+ }
+
+ _gcry_md_reset(hd);
+ _gcry_md_write (hd, sample_data_bad, strlen(sample_data_bad));
+ err = _gcry_pk_verify_md (sig, data_tmpl, hd, pkey, NULL);
+ if (gcry_err_code (err) != GPG_ERR_BAD_SIGNATURE)
+ {
+ errtxt = "bad signature not detected";
+ goto leave;
+ }
+
+
+ leave:
+ _gcry_md_close (hd);
+ sexp_release (sig);
+ sexp_release (l1);
+ sexp_release (l2);
+ mpi_release (r);
+ mpi_release (s);
+ mpi_release (calculated_r);
+ mpi_release (calculated_s);
+ return errtxt;
+}
+
+
static const char *
selftest_sign (gcry_sexp_t pkey, gcry_sexp_t skey)
{
static gpg_err_code_t
-selftests_ecdsa (selftest_report_func_t report)
+selftests_ecdsa (selftest_report_func_t report, int extended)
{
const char *what;
const char *errtxt;
goto failed;
}
- what = "sign";
- errtxt = selftest_sign (pkey, skey);
+ if (extended)
+ {
+ what = "sign";
+ errtxt = selftest_sign (pkey, skey);
+ if (errtxt)
+ goto failed;
+ }
+
+ what = "digest sign";
+ errtxt = selftest_hash_sign (pkey, skey);
if (errtxt)
goto failed;
static gpg_err_code_t
run_selftests (int algo, int extended, selftest_report_func_t report)
{
- (void)extended;
-
if (algo != GCRY_PK_ECC)
return GPG_ERR_PUBKEY_ALGO;
- return selftests_ecdsa (report);
+ return selftests_ecdsa (report, extended);
}
#include "mpi.h"
#include "cipher.h"
#include "pubkey-internal.h"
+#include "const-time.h"
/* Blinding is used to mitigate side-channel attacks. You may undef
static gcry_err_code_t
elg_decrypt (gcry_sexp_t *r_plain, gcry_sexp_t s_data, gcry_sexp_t keyparms)
{
- gpg_err_code_t rc;
+ gpg_err_code_t rc, rc_sexp;
struct pk_encoding_ctx ctx;
gcry_sexp_t l1 = NULL;
gcry_mpi_t data_a = NULL;
gcry_mpi_t plain = NULL;
unsigned char *unpad = NULL;
size_t unpadlen = 0;
+ gcry_sexp_t result = NULL;
+ gcry_sexp_t dummy = NULL;
_gcry_pk_util_init_encoding_ctx (&ctx, PUBKEY_OP_DECRYPT,
elg_get_nbits (keyparms));
{
case PUBKEY_ENC_PKCS1:
rc = _gcry_rsa_pkcs1_decode_for_enc (&unpad, &unpadlen, ctx.nbits, plain);
- mpi_free (plain); plain = NULL;
- if (!rc)
- rc = sexp_build (r_plain, NULL, "(value %b)", (int)unpadlen, unpad);
+ mpi_free (plain);
+ plain = NULL;
+ rc_sexp = sexp_build (&result, NULL, "(value %b)", (int)unpadlen, unpad);
+ *r_plain = sexp_null_cond (result, ct_is_not_zero (rc));
+ dummy = sexp_null_cond (result, ct_is_zero (rc));
+ sexp_release (dummy);
+ rc = ct_ulong_select (rc_sexp, rc,
+ ct_is_zero (rc) & ct_is_not_zero (rc_sexp));
break;
case PUBKEY_ENC_OAEP:
rc = _gcry_rsa_oaep_decode (&unpad, &unpadlen,
ctx.nbits, ctx.hash_algo, plain,
ctx.label, ctx.labellen);
- mpi_free (plain); plain = NULL;
- if (!rc)
- rc = sexp_build (r_plain, NULL, "(value %b)", (int)unpadlen, unpad);
+ mpi_free (plain);
+ plain = NULL;
+ rc_sexp = sexp_build (&result, NULL, "(value %b)", (int)unpadlen, unpad);
+ *r_plain = sexp_null_cond (result, ct_is_not_zero (rc));
+ dummy = sexp_null_cond (result, ct_is_zero (rc));
+ sexp_release (dummy);
+ rc = ct_ulong_select (rc_sexp, rc,
+ ct_is_zero (rc) & ct_is_not_zero (rc_sexp));
break;
default:
return GPG_ERR_INV_VALUE;
#endif
-
/* Step 2 */
l = ((dklen - 1)/ hlen) + 1;
r = dklen - (l - 1) * hlen;
if (!saltlen)
ec = GPG_ERR_INV_VALUE;
else
- ec = _gcry_kdf_pkdf2 (passphrase, passphraselen, subalgo,
- salt, saltlen, iterations, keysize, keybuffer);
+ {
+ /* FIPS requires minimum passphrase length, see FIPS 140-3 IG D.N */
+ if (fips_mode () && passphraselen < 8)
+ return GPG_ERR_INV_VALUE;
+
+ /* FIPS requires minimum salt length of 128 b (SP 800-132 sec. 5.1, p.6) */
+ if (fips_mode () && saltlen < 16)
+ return GPG_ERR_INV_VALUE;
+
+ /* FIPS requires minimum iterations bound (SP 800-132 sec 5.2, p.6) */
+ if (fips_mode () && iterations < 1000)
+ return GPG_ERR_INV_VALUE;
+
+ /* Check minimum key size */
+ if (fips_mode () && keysize < 14)
+ return GPG_ERR_INV_VALUE;
+
+ ec = _gcry_kdf_pkdf2 (passphrase, passphraselen, subalgo,
+ salt, saltlen, iterations, keysize, keybuffer);
+ }
break;
case 41:
parallelism = (unsigned int)param[3];
}
+ if (parallelism == 0)
+ return GPG_ERR_INV_VALUE;
+
n = offsetof (struct argon2_context, out) + taglen;
a = xtrymalloc (n);
if (!a)
{
unsigned char key[512]; /* hardcoded to avoid allocation */
size_t keysize = expectlen;
-
- /* Skip test with shoter passphrase in FIPS mode. */
- if (fips_mode () && passphraselen < 14)
- return NULL;
+ int rv;
if (keysize > sizeof(key))
return "invalid tests data";
- if (_gcry_kdf_derive (passphrase, passphraselen, algo,
- hash_algo, salt, saltlen, iterations,
- keysize, key))
+ rv = _gcry_kdf_derive (passphrase, passphraselen, algo,
+ hash_algo, salt, saltlen, iterations,
+ keysize, key);
+ /* In fips mode we have special requirements for the input and
+ * output parameters */
+ if (fips_mode ())
+ {
+ if (rv && (passphraselen < 8 || saltlen < 16 ||
+ iterations < 1000 || expectlen < 14))
+ return NULL;
+ else if (rv)
+ return "gcry_kdf_derive unexpectedly failed in FIPS Mode";
+ }
+ else if (rv)
return "gcry_kdf_derive failed";
if (memcmp (key, expect, expectlen))
.ltorg
.size _gcry_keccak_permute_armv7_neon,.-_gcry_keccak_permute_armv7_neon;
-@//unsigned _gcry_keccak_permute_armv7_neon(u64 *state, @r4
-@ int pos, @r1
-@ const byte *lanes, @r2
-@ unsigned int nlanes, @r3
-@ int blocklanes) @ r5 callable from C
+@//unsigned _gcry_keccak_absorb_lanes64_armv7_neon(u64 *state, @r4
+@ int pos, @r1
+@ const byte *lanes, @r2
+@ size_t nlanes, @r3
+@ int blocklanes) @ r5 callable from C
.p2align 3
.global _gcry_keccak_absorb_lanes64_armv7_neon
.type _gcry_keccak_absorb_lanes64_armv7_neon,%function;
{
unsigned int (*permute)(KECCAK_STATE *hd);
unsigned int (*absorb)(KECCAK_STATE *hd, int pos, const byte *lanes,
- unsigned int nlanes, int blocklanes);
+ size_t nlanes, int blocklanes);
unsigned int (*extract) (KECCAK_STATE *hd, unsigned int pos, byte *outbuf,
unsigned int outlen);
} keccak_ops_t;
unsigned int _gcry_keccak_permute_armv7_neon(u64 *state);
unsigned int _gcry_keccak_absorb_lanes64_armv7_neon(u64 *state, int pos,
const byte *lanes,
- unsigned int nlanes,
+ size_t nlanes,
int blocklanes);
static unsigned int keccak_permute64_armv7_neon(KECCAK_STATE *hd)
static unsigned int
keccak_absorb_lanes64_armv7_neon(KECCAK_STATE *hd, int pos, const byte *lanes,
- unsigned int nlanes, int blocklanes)
+ size_t nlanes, int blocklanes)
{
if (blocklanes < 0)
{
static unsigned int
keccak_absorb_lanes32bi(KECCAK_STATE *hd, int pos, const byte *lanes,
- unsigned int nlanes, int blocklanes)
+ size_t nlanes, int blocklanes)
{
unsigned int burn = 0;
static unsigned int
keccak_absorb_lanes32bi_bmi2(KECCAK_STATE *hd, int pos, const byte *lanes,
- unsigned int nlanes, int blocklanes)
+ size_t nlanes, int blocklanes)
{
unsigned int burn = 0;
const byte *inbuf = inbuf_arg;
unsigned int nburn, burn = 0;
unsigned int count, i;
- unsigned int pos, nlanes;
+ unsigned int pos;
+ size_t nlanes;
#ifdef USE_S390X_CRYPTO
if (ctx->kimd_func)
burn = nburn > burn ? nburn : burn;
inlen -= nlanes * 8;
inbuf += nlanes * 8;
- count += nlanes * 8;
- count = count % bsize;
+ count = ((size_t) count + nlanes * 8) % bsize;
}
if (inlen)
static unsigned int
KECCAK_F1600_ABSORB_FUNC_NAME(KECCAK_STATE *hd, int pos, const byte *lanes,
- unsigned int nlanes, int blocklanes)
+ size_t nlanes, int blocklanes)
{
unsigned int burn = 0;
#endif
#if USE_MD5
const gcry_mac_spec_t _gcry_mac_type_spec_hmac_md5 = {
- GCRY_MAC_HMAC_MD5, {0, 0}, "HMAC_MD5",
+ GCRY_MAC_HMAC_MD5, {0, 1}, "HMAC_MD5",
&hmac_ops
};
#endif
{
GcryDigestEntry *r;
- if (fips_mode () && keylen < 14)
- return GPG_ERR_INV_VALUE;
-
if (!a->ctx->list)
return GPG_ERR_DIGEST_ALGO; /* Might happen if no algo is enabled. */
+++ /dev/null
-/* md2.c - MD2 Message-Digest Algorithm
- * Copyright (C) 2014 Dmitry Eremin-Solenikov
- *
- * This file is part of Libgcrypt.
- *
- * Libgcrypt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Libgcrypt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <config.h>
-
-#include "g10lib.h"
-#include "cipher.h"
-
-#include "bithelp.h"
-#include "bufhelp.h"
-#include "hash-common.h"
-
-typedef struct {
- gcry_md_block_ctx_t bctx;
- unsigned char C[16];
- unsigned char L;
- unsigned char X[48];
-} MD2_CONTEXT;
-
-static const unsigned char S[] =
- {
- 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01,
- 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
- 0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C,
- 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA,
- 0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16,
- 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12,
- 0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49,
- 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A,
- 0xA9, 0x68, 0x79, 0x91, 0x15, 0xB2, 0x07, 0x3F,
- 0x94, 0xC2, 0x10, 0x89, 0x0B, 0x22, 0x5F, 0x21,
- 0x80, 0x7F, 0x5D, 0x9A, 0x5A, 0x90, 0x32, 0x27,
- 0x35, 0x3E, 0xCC, 0xE7, 0xBF, 0xF7, 0x97, 0x03,
- 0xFF, 0x19, 0x30, 0xB3, 0x48, 0xA5, 0xB5, 0xD1,
- 0xD7, 0x5E, 0x92, 0x2A, 0xAC, 0x56, 0xAA, 0xC6,
- 0x4F, 0xB8, 0x38, 0xD2, 0x96, 0xA4, 0x7D, 0xB6,
- 0x76, 0xFC, 0x6B, 0xE2, 0x9C, 0x74, 0x04, 0xF1,
- 0x45, 0x9D, 0x70, 0x59, 0x64, 0x71, 0x87, 0x20,
- 0x86, 0x5B, 0xCF, 0x65, 0xE6, 0x2D, 0xA8, 0x02,
- 0x1B, 0x60, 0x25, 0xAD, 0xAE, 0xB0, 0xB9, 0xF6,
- 0x1C, 0x46, 0x61, 0x69, 0x34, 0x40, 0x7E, 0x0F,
- 0x55, 0x47, 0xA3, 0x23, 0xDD, 0x51, 0xAF, 0x3A,
- 0xC3, 0x5C, 0xF9, 0xCE, 0xBA, 0xC5, 0xEA, 0x26,
- 0x2C, 0x53, 0x0D, 0x6E, 0x85, 0x28, 0x84, 0x09,
- 0xD3, 0xDF, 0xCD, 0xF4, 0x41, 0x81, 0x4D, 0x52,
- 0x6A, 0xDC, 0x37, 0xC8, 0x6C, 0xC1, 0xAB, 0xFA,
- 0x24, 0xE1, 0x7B, 0x08, 0x0C, 0xBD, 0xB1, 0x4A,
- 0x78, 0x88, 0x95, 0x8B, 0xE3, 0x63, 0xE8, 0x6D,
- 0xE9, 0xCB, 0xD5, 0xFE, 0x3B, 0x00, 0x1D, 0x39,
- 0xF2, 0xEF, 0xB7, 0x0E, 0x66, 0x58, 0xD0, 0xE4,
- 0xA6, 0x77, 0x72, 0xF8, 0xEB, 0x75, 0x4B, 0x0A,
- 0x31, 0x44, 0x50, 0xB4, 0x8F, 0xED, 0x1F, 0x1A,
- 0xDB, 0x99, 0x8D, 0x33, 0x9F, 0x11, 0x83, 0x14
-};
-
-
-static void
-permute (unsigned char *X, const unsigned char *buf)
-{
- int i, j;
- unsigned char t;
-
- memcpy (X+16, buf, 16);
- for (i = 0; i < 16; i++)
- X[32+i] = X[16+i] ^ X[i];
- t = 0;
- for (i = 0; i < 18; i++)
- {
- for (j = 0; j < 48; j++)
- {
- t = X[j] ^ S[t];
- X[j] = t;
- }
- t += i;
- }
-}
-
-
-static unsigned int
-transform_blk (void *c, const unsigned char *data)
-{
- MD2_CONTEXT *ctx = c;
- int j;
-
- for (j = 0; j < 16; j++)
- {
- ctx->C[j] ^= S[data[j] ^ ctx->L];
- ctx->L = ctx->C[j];
- }
-
- permute(ctx->X, data);
-
- return /* burn stack */ 4 + 5 * sizeof(void*);
-}
-
-
-static unsigned int
-transform ( void *c, const unsigned char *data, size_t nblks )
-{
- unsigned int burn;
-
- do
- {
- burn = transform_blk (c, data);
- data += 64;
- }
- while (--nblks);
-
- return burn;
-}
-
-
-static void
-md2_init (void *context, unsigned int flags)
-{
- MD2_CONTEXT *ctx = context;
-
- (void)flags;
-
- memset (ctx, 0, sizeof(*ctx));
- ctx->bctx.blocksize_shift = _gcry_ctz(16);
- ctx->bctx.bwrite = transform;
-}
-
-
-static void
-md2_final (void *context)
-{
- MD2_CONTEXT *hd = context;
- unsigned int burn;
-
- /* pad */
- memset (hd->bctx.buf + hd->bctx.count,
- 16 - hd->bctx.count, 16 - hd->bctx.count);
- burn = transform_blk (hd, hd->bctx.buf);
- permute (hd->X, hd->C);
-}
-
-static byte *
-md2_read (void *context)
-{
- MD2_CONTEXT *hd = (MD2_CONTEXT *) context;
- return hd->X;
-}
-
-static const byte asn[18] = /* Object ID is 1.2.840.113549.2.2 */
- { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86,0x48,
- 0x86, 0xf7, 0x0d, 0x02, 0x02, 0x05, 0x00, 0x04, 0x10 };
-
-static const gcry_md_oid_spec_t oid_spec_md2[] =
- {
- /* iso.member-body.us.rsadsi.digestAlgorithm.md2 */
- { "1.2.840.113549.2.2" },
- { NULL },
- };
-
-const gcry_md_spec_t _gcry_digest_spec_md2 =
- {
- GCRY_MD_MD2, {0, 0},
- "MD2", asn, DIM (asn), oid_spec_md2, 16,
- md2_init, _gcry_md_block_write, md2_final, md2_read, NULL,
- NULL,
- sizeof (MD2_CONTEXT)
- };
const gcry_md_spec_t _gcry_digest_spec_md5 =
{
- GCRY_MD_MD5, {0, 0},
+ GCRY_MD_MD5, {0, 1},
"MD5", asn, DIM (asn), oid_spec_md5, 16,
md5_init, _gcry_md_block_write, md5_final, md5_read, NULL,
NULL,
void *random_override = NULL;
size_t random_override_len = 0;
- if ( !(value=sexp_nth_data (lvalue, 1, &valuelen)) || !valuelen )
+ /* The RSA PKCS#1.5 encryption is no longer supported by FIPS */
+ if (fips_mode ())
+ rc = GPG_ERR_INV_FLAG;
+ else if ( !(value=sexp_nth_data (lvalue, 1, &valuelen)) || !valuelen )
rc = GPG_ERR_INV_OBJ;
else
{
const void * value;
size_t valuelen;
- if ( !(value=sexp_nth_data (lvalue, 1, &valuelen)) || !valuelen )
+ /* The RSA OAEP encryption requires some more assurances in FIPS */
+ if (fips_mode ())
+ rc = GPG_ERR_INV_FLAG;
+ else if ( !(value=sexp_nth_data (lvalue, 1, &valuelen)) || !valuelen )
rc = GPG_ERR_INV_OBJ;
else
{
gcry_sexp_t s_hash = NULL;
int algo;
const unsigned char *digest;
+ int digest_size;
gcry_error_t err;
gcry_md_hd_t hd;
- char *s;
+ const char *s;
char *hash_name;
*r_sig = NULL;
hash_name = NULL;
else
{
- char *p;
+ const char *p;
for (p = s; *p && *p != ' '; p++)
;
if (hash_name)
{
algo = _gcry_md_map_name (hash_name);
- if (algo == 0
+ digest_size = (int) _gcry_md_get_algo_dlen (algo);
+
+ if (algo == 0 || digest_size == 0
|| (fips_mode () && algo == GCRY_MD_SHA1))
{
xfree (hash_name);
else
{
algo = _gcry_md_get_algo (hd);
+ digest_size = (int) _gcry_md_get_algo_dlen (algo);
- if (fips_mode () && algo == GCRY_MD_SHA1)
+ if (digest_size == 0 || (fips_mode () && algo == GCRY_MD_SHA1))
{
_gcry_md_close (hd);
return GPG_ERR_DIGEST_ALGO;
{
if (hash_name)
rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
- (int) _gcry_md_get_algo_dlen (algo),
- digest);
+ digest_size, digest);
else
rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
_gcry_md_algo_name (algo),
- (int) _gcry_md_get_algo_dlen (algo),
- digest);
+ digest_size, digest);
}
else
{
if (hash_name)
rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
- (int) _gcry_md_get_algo_dlen (algo),
- digest,
+ digest_size, digest,
(int) len, p);
else
rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
_gcry_md_algo_name (algo),
- (int) _gcry_md_get_algo_dlen (algo),
- digest,
+ digest_size, digest,
(int) len, p);
}
gcry_sexp_t s_hash = NULL;
int algo;
const unsigned char *digest;
+ int digest_size;
gcry_error_t err;
gcry_md_hd_t hd;
+ const char *s;
+ char *hash_name;
+
+ /* Check if it has fixed hash name or %s */
+ s = strstr (tmpl, "(hash ");
+ if (s == NULL)
+ return GPG_ERR_DIGEST_ALGO;
+
+ s += 6;
+ if (!strncmp (s, "%s", 2))
+ hash_name = NULL;
+ else
+ {
+ const char *p;
+
+ for (p = s; *p && *p != ' '; p++)
+ ;
+
+ hash_name = xtrymalloc (p - s + 1);
+ if (!hash_name)
+ return gpg_error_from_syserror ();
+ memcpy (hash_name, s, p - s);
+ hash_name[p - s] = 0;
+ }
err = _gcry_md_copy (&hd, hd_orig);
if (err)
- return gpg_err_code (err);
+ {
+ xfree (hash_name);
+ return gpg_err_code (err);
+ }
+
+ if (hash_name)
+ {
+ algo = _gcry_md_map_name (hash_name);
+ digest_size = (int) _gcry_md_get_algo_dlen (algo);
- algo = _gcry_md_get_algo (hd);
+ if (algo == 0 || digest_size == 0
+ || (fips_mode () && algo == GCRY_MD_SHA1))
+ {
+ xfree (hash_name);
+ _gcry_md_close (hd);
+ return GPG_ERR_DIGEST_ALGO;
+ }
- if (fips_mode () && algo == GCRY_MD_SHA1)
- return GPG_ERR_DIGEST_ALGO;
+ digest = _gcry_md_read (hd, algo);
+ }
+ else
+ {
+ algo = _gcry_md_get_algo (hd);
+ digest_size = (int) _gcry_md_get_algo_dlen (algo);
+
+ if (digest_size == 0 || (fips_mode () && algo == GCRY_MD_SHA1))
+ {
+ _gcry_md_close (hd);
+ return GPG_ERR_DIGEST_ALGO;
+ }
+
+ digest = _gcry_md_read (hd, 0);
+ }
- digest = _gcry_md_read (hd, 0);
if (!digest)
{
+ xfree (hash_name);
_gcry_md_close (hd);
return GPG_ERR_DIGEST_ALGO;
}
if (!ctx)
- rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
- _gcry_md_algo_name (algo),
- (int) _gcry_md_get_algo_dlen (algo),
- digest);
+ {
+ if (hash_name)
+ rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
+ digest_size, digest);
+ else
+ rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
+ _gcry_md_algo_name (algo),
+ digest_size, digest);
+ }
else
{
const unsigned char *p;
return rc;
}
- rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
- _gcry_md_algo_name (algo),
- (int) _gcry_md_get_algo_dlen (algo),
- digest,
- (int) len, p);
+ if (hash_name)
+ rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
+ digest_size, digest,
+ (int) len, p);
+ else
+ rc = _gcry_sexp_build (&s_hash, NULL, tmpl,
+ _gcry_md_algo_name (algo),
+ digest_size, digest,
+ (int) len, p);
}
+ xfree (hash_name);
_gcry_md_close (hd);
if (rc)
return rc;
struct pk_random_override {
size_t len;
- unsigned char area[];
+ unsigned char area[1]; /* In future, we may use flexible array member. */
};
gpg_err_code_t
return GPG_ERR_EINVAL;
ctx = _gcry_ctx_alloc (CONTEXT_TYPE_RANDOM_OVERRIDE,
- sizeof (size_t) + len, NULL);
+ offsetof (struct pk_random_override, area) + len,
+ NULL);
if (!ctx)
return gpg_err_code_from_syserror ();
pro = _gcry_ctx_get_pointer (ctx, CONTEXT_TYPE_RANDOM_OVERRIDE);
#include "mpi.h"
#include "cipher.h"
#include "pubkey-internal.h"
+#include "const-time.h"
/* Turn VALUE into an octet string and store it in an allocated buffer
}
+/*
+ * <--len-->
+ * DST-------v v-------------SRC
+ * [.................]
+ * <---- buflen --->
+ *
+ * Copy the memory area SRC with LEN into another memory area DST.
+ * Conditions met:
+ * the address SRC > DST
+ * DST + BUFLEN == SRC + LEN.
+ *
+ * Memory access doesn't depends on LEN, but always done independently,
+ * sliding memory area by 1, 2, 4 ... until done.
+ */
+static void
+memmov_independently (void *dst, const void *src, size_t len, size_t buflen)
+{
+ size_t offset = (size_t)((char *)src - (char *)dst);
+ size_t shift;
+
+ (void)len; /* No dependency. */
+ for (shift = 1; shift < buflen; shift <<= 1)
+ {
+ ct_memmov_cond (dst, (char *)dst + shift, buflen - shift, (offset&1));
+ offset >>= 1;
+ }
+}
+
+
/* Decode a plaintext in VALUE assuming pkcs#1 block type 2 padding.
NBITS is the size of the secret key. On success the result is
stored as a newly allocated buffer at R_RESULT and its valid length at
gcry_error_t err;
unsigned char *frame = NULL;
size_t nframe = (nbits+7) / 8;
- size_t n;
+ size_t n, n0;
+ unsigned int failed = 0;
+ unsigned int not_found = 1;
*r_result = NULL;
n = 0;
if (!frame[0])
n++;
- if (frame[n++] != 0x02)
- {
- xfree (frame);
- return GPG_ERR_ENCODING_PROBLEM; /* Wrong block type. */
- }
+ failed |= ct_not_equal_byte (frame[n++], 0x02);
- /* Skip the non-zero random bytes and the terminating zero byte. */
- for (; n < nframe && frame[n] != 0x00; n++)
- ;
- if (n+1 >= nframe)
+ /* Find the terminating zero byte. */
+ n0 = n;
+ for (; n < nframe; n++)
{
- xfree (frame);
- return GPG_ERR_ENCODING_PROBLEM; /* No zero byte. */
+ not_found &= ct_not_equal_byte (frame[n], 0x00);
+ n0 += not_found;
}
- n++; /* Skip the zero byte. */
+
+ failed |= not_found;
+ n0 += ct_is_zero (not_found); /* Skip the zero byte. */
/* To avoid an extra allocation we reuse the frame buffer. The only
caller of this function will anyway free the result soon. */
- memmove (frame, frame + n, nframe - n);
+ memmov_independently (frame, frame + n0, nframe - n0, nframe);
+
*r_result = frame;
- *r_resultlen = nframe - n;
+ *r_resultlen = nframe - n0;
if (DBG_CIPHER)
log_printhex ("value extracted from PKCS#1 block type 2 encoded data",
*r_result, *r_resultlen);
- return 0;
+ return (0U - failed) & GPG_ERR_ENCODING_PROBLEM;
}
size_t db_len; /* Length of DB and masked_db. */
size_t nkey = (nbits+7)/8; /* Length of the key in bytes. */
int failed = 0; /* Error indicator. */
- size_t n;
+ size_t n, n1;
+ unsigned int not_found = 1;
*r_result = NULL;
db_len = nframe - 1 - hlen;
/* Step 3c and 3d: seed = maskedSeed ^ mgf(maskedDB, hlen). */
- if (mgf1 (seed, hlen, masked_db, db_len, algo))
- failed = 1;
+ failed |= (mgf1 (seed, hlen, masked_db, db_len, algo) != 0);
for (n = 0; n < hlen; n++)
seed[n] ^= masked_seed[n];
/* Step 3e and 3f: db = maskedDB ^ mgf(seed, db_len). */
- if (mgf1 (db, db_len, seed, hlen, algo))
- failed = 1;
+ failed |= (mgf1 (db, db_len, seed, hlen, algo) != 0);
for (n = 0; n < db_len; n++)
db[n] ^= masked_db[n];
/* Step 3g: Check lhash, an possible empty padding string terminated
by 0x01 and the first byte of EM being 0. */
- if (memcmp (lhash, db, hlen))
- failed = 1;
- for (n = hlen; n < db_len; n++)
- if (db[n] == 0x01)
- break;
- if (n == db_len)
- failed = 1;
- if (frame[0])
- failed = 1;
+ failed |= ct_not_memequal (lhash, db, hlen);
+ for (n = n1 = hlen; n < db_len; n++)
+ {
+ not_found &= ct_not_equal_byte (db[n], 0x01);
+ n1 += not_found;
+ }
+ failed |= not_found;
+ failed |= ct_not_equal_byte (frame[0], 0x00);
xfree (lhash);
xfree (frame);
- if (failed)
- {
- xfree (seed);
- return GPG_ERR_ENCODING_PROBLEM;
- }
/* Step 4: Output M. */
/* To avoid an extra allocation we reuse the seed buffer. The only
caller of this function will anyway free the result soon. */
- n++;
- memmove (seed, db + n, db_len - n);
+ n1 += !not_found;
+ memmov_independently (seed, db + n1, db_len - n1, nframe - 1);
*r_result = seed;
- *r_resultlen = db_len - n;
+ *r_resultlen = db_len - n1;
seed = NULL;
if (DBG_CIPHER)
log_printhex ("value extracted from OAEP encoded data",
*r_result, *r_resultlen);
- return 0;
+ return (0U - failed) & GPG_ERR_ENCODING_PROBLEM;
}
hlen = _gcry_md_get_algo_dlen (algo);
gcry_assert (hlen); /* We expect a valid ALGO here. */
+ /* The FIPS 186-4 Section 5.5 allows only 0 <= sLen <= hLen */
+ if (fips_mode () && saltlen > hlen)
+ {
+ rc = GPG_ERR_INV_ARG;
+ goto leave;
+ }
+
/* Allocate a help buffer and setup some pointers. */
buflen = 8 + hlen + saltlen + (emlen - hlen - 1);
buf = xtrymalloc (buflen);
hlen = _gcry_md_get_algo_dlen (algo);
gcry_assert (hlen); /* We expect a valid ALGO here. */
+ /* The FIPS 186-4 Section 5.5 allows only 0 <= sLen <= hLen */
+ if (fips_mode () && saltlen > hlen)
+ {
+ rc = GPG_ERR_INV_ARG;
+ goto leave;
+ }
+
/* Allocate a help buffer and setup some pointers.
This buffer is used for two purposes:
+------------------------------+-------+
#include "mpi.h"
#include "cipher.h"
#include "pubkey-internal.h"
+#include "const-time.h"
typedef struct
return result;
}
+static int
+test_keys_fips (gcry_sexp_t skey)
+{
+ int result = -1; /* Default to failure. */
+ char plaintext[128];
+ gcry_sexp_t sig = NULL;
+ const char *data_tmpl = "(data (flags pkcs1) (hash %s %b))";
+ gcry_md_hd_t hd = NULL;
+ int ec;
+
+ /* Create a random plaintext. */
+ _gcry_randomize (plaintext, sizeof plaintext, GCRY_WEAK_RANDOM);
+
+ /* Open MD context and feed the random data in */
+ ec = _gcry_md_open (&hd, GCRY_MD_SHA256, 0);
+ if (ec)
+ goto leave;
+ _gcry_md_write (hd, plaintext, sizeof(plaintext));
+
+ /* Use the RSA secret function to create a signature of the plaintext. */
+ ec = _gcry_pk_sign_md (&sig, data_tmpl, hd, skey, NULL);
+ if (ec)
+ goto leave;
+
+ /* Use the RSA public function to verify this signature. */
+ ec = _gcry_pk_verify_md (sig, data_tmpl, hd, skey, NULL);
+ if (ec)
+ goto leave;
+
+ /* Modify the data and check that the signing fails. */
+ _gcry_md_reset(hd);
+ plaintext[sizeof plaintext / 2] ^= 1;
+ _gcry_md_write (hd, plaintext, sizeof(plaintext));
+ ec = _gcry_pk_verify_md (sig, data_tmpl, hd, skey, NULL);
+ if (ec != GPG_ERR_BAD_SIGNATURE)
+ goto leave; /* Signature verification worked on modified data */
+
+ result = 0; /* All tests succeeded. */
+ leave:
+ sexp_release (sig);
+ _gcry_md_close (hd);
+ return result;
+}
/* Callback used by the prime generation to test whether the exponent
is suitable. Returns 0 if the test has been passed. */
static gpg_err_code_t
rsa_check_keysize (unsigned int nbits)
{
- if (fips_mode() && nbits < 2048)
+ if (fips_mode () && nbits < 2048)
return GPG_ERR_INV_VALUE;
return GPG_ERR_NO_ERROR;
}
+/* Check the RSA key length is acceptable for signature verification
+ *
+ * FIPS allows signature verification with RSA keys of size
+ * 1024, 1280, 1536 and 1792 in legacy mode, but this is up to the
+ * calling application to decide if the signature is legacy and
+ * should be accepted.
+ */
+static gpg_err_code_t
+rsa_check_verify_keysize (unsigned int nbits)
+{
+ if (fips_mode ())
+ {
+ if ((nbits >= 1024 && (nbits % 256) == 0) || nbits >= 2048)
+ return GPG_ERR_NO_ERROR;
+
+ return GPG_ERR_INV_VALUE;
+ }
+
+ return GPG_ERR_NO_ERROR;
+}
+
+
/****************
* Generate a key pair with a key of size NBITS.
* USE_E = 0 let Libcgrypt decide what exponent to use.
retry:
/* generate p and q */
- for (i = 0; i < 5 * pbits; i++)
+ for (i = 0; i < 10 * pbits; i++)
{
ploop:
if (!testparms)
{
_gcry_mpi_randomize (p, pbits, random_level);
+ mpi_set_bit (p, 0);
}
if (mpi_cmp (p, minp) < 0)
{
else if (testparms)
goto err;
}
- if (i >= 5 * pbits)
+ if (i >= 10 * pbits)
goto err;
- for (i = 0; i < 5 * pbits; i++)
+ for (i = 0; i < 20 * pbits; i++)
{
qloop:
if (!testparms)
{
_gcry_mpi_randomize (q, pbits, random_level);
+ mpi_set_bit (q, 0);
}
if (mpi_cmp (q, minp) < 0)
{
else if (testparms)
goto err;
}
- if (i >= 5 * pbits)
+ if (i >= 20 * pbits)
goto err;
if (testparms)
sk->d = d;
sk->u = u;
- /* Now we can test our keys. */
- if (ec || (!testparms && test_keys (sk, nbits - 64)))
+ if (ec)
{
_gcry_mpi_release (sk->n); sk->n = NULL;
_gcry_mpi_release (sk->e); sk->e = NULL;
_gcry_mpi_release (sk->q); sk->q = NULL;
_gcry_mpi_release (sk->d); sk->d = NULL;
_gcry_mpi_release (sk->u); sk->u = NULL;
- if (!ec)
- {
- fips_signal_error ("self-test after key generation failed");
- return GPG_ERR_SELFTEST_FAILED;
- }
}
return ec;
int flags = 0;
gcry_sexp_t l1;
gcry_sexp_t swap_info = NULL;
+ int testparms = 0;
memset (&sk, 0, sizeof sk);
if (deriveparms || (flags & PUBKEY_FLAG_USE_X931))
{
int swapped;
+ if (fips_mode ())
+ {
+ sexp_release (deriveparms);
+ return GPG_ERR_INV_SEXP;
+ }
ec = generate_x931 (&sk, nbits, evalue, deriveparms, &swapped);
sexp_release (deriveparms);
if (!ec && swapped)
}
deriveparms = (genparms? sexp_find_token (genparms, "test-parms", 0)
/**/ : NULL);
+ if (deriveparms)
+ testparms = 1;
/* Generate. */
- if (deriveparms || fips_mode())
+ if (deriveparms || fips_mode ())
{
ec = generate_fips (&sk, nbits, evalue, deriveparms,
!!(flags & PUBKEY_FLAG_TRANSIENT_KEY));
mpi_free (sk.u);
sexp_release (swap_info);
+ if (!ec && !testparms && fips_mode () && test_keys_fips (*r_skey))
+ {
+ sexp_release (*r_skey); *r_skey = NULL;
+ fips_signal_error ("self-test after key generation failed");
+ return GPG_ERR_SELFTEST_FAILED;
+ }
+
return ec;
}
rsa_decrypt (gcry_sexp_t *r_plain, gcry_sexp_t s_data, gcry_sexp_t keyparms)
{
- gpg_err_code_t rc;
+ gpg_err_code_t rc, rc_sexp;
struct pk_encoding_ctx ctx;
gcry_sexp_t l1 = NULL;
gcry_mpi_t data = NULL;
unsigned char *unpad = NULL;
size_t unpadlen = 0;
unsigned int nbits = rsa_get_nbits (keyparms);
+ gcry_sexp_t result = NULL;
+ gcry_sexp_t dummy = NULL;
rc = rsa_check_keysize (nbits);
if (rc)
rc = GPG_ERR_INV_DATA;
goto leave;
}
+ if (fips_mode () && (ctx.encoding == PUBKEY_ENC_PKCS1 ||
+ ctx.encoding == PUBKEY_ENC_OAEP))
+ {
+ rc = GPG_ERR_INV_FLAG;
+ goto leave;
+ }
/* Extract the key. */
rc = sexp_extract_param (keyparms, NULL, "nedp?q?u?",
rc = _gcry_rsa_pkcs1_decode_for_enc (&unpad, &unpadlen, nbits, plain);
mpi_free (plain);
plain = NULL;
- if (!rc)
- rc = sexp_build (r_plain, NULL, "(value %b)", (int)unpadlen, unpad);
+ rc_sexp = sexp_build (&result, NULL, "(value %b)", (int)unpadlen, unpad);
+ *r_plain = sexp_null_cond (result, ct_is_not_zero (rc));
+ dummy = sexp_null_cond (result, ct_is_zero (rc));
+ sexp_release (dummy);
+ rc = ct_ulong_select (rc_sexp, rc,
+ ct_is_zero (rc) & ct_is_not_zero (rc_sexp));
break;
case PUBKEY_ENC_OAEP:
plain, ctx.label, ctx.labellen);
mpi_free (plain);
plain = NULL;
- if (!rc)
- rc = sexp_build (r_plain, NULL, "(value %b)", (int)unpadlen, unpad);
+ rc_sexp = sexp_build (&result, NULL, "(value %b)", (int)unpadlen, unpad);
+ *r_plain = sexp_null_cond (result, ct_is_not_zero (rc));
+ dummy = sexp_null_cond (result, ct_is_zero (rc));
+ sexp_release (dummy);
+ rc = ct_ulong_select (rc_sexp, rc,
+ ct_is_zero (rc) & ct_is_not_zero (rc_sexp));
break;
default:
gcry_mpi_t result = NULL;
unsigned int nbits = rsa_get_nbits (keyparms);
- rc = rsa_check_keysize (nbits);
+ rc = rsa_check_verify_keysize (nbits);
if (rc)
return rc;
Self-test section.
*/
+static const char *
+selftest_hash_sign_2048 (gcry_sexp_t pkey, gcry_sexp_t skey)
+{
+ int md_algo = GCRY_MD_SHA256;
+ gcry_md_hd_t hd = NULL;
+ const char *data_tmpl = "(data (flags pkcs1) (hash %s %b))";
+ static const char sample_data[] =
+ "11223344556677889900aabbccddeeff"
+ "102030405060708090a0b0c0d0f01121";
+ static const char sample_data_bad[] =
+ "11223344556677889900aabbccddeeff"
+ "802030405060708090a0b0c0d0f01121";
+
+ const char *errtxt = NULL;
+ gcry_error_t err;
+ gcry_sexp_t sig = NULL;
+ /* raw signature data reference */
+ const char ref_data[] =
+ "518f41dea3ad884e93eefff8d7ca68a6f4c30d923632e35673651d675cebd652"
+ "a44ed66f6879b18f3d48b2d235b1dd78f6189be1440352cc94231a55c1f93109"
+ "84616b2841c42fe9a6e37be34cd188207209bd028e2fa93e721fbac40c31a068"
+ "1253b312d4e07addb9c7f3d508fa89f218ea7c7f7b9f6a9b1e522c19fa1cd839"
+ "93f9d4ca2f16c3d0b9abafe5e63e848152afc72ce7ee19ea45353116f85209ea"
+ "b9de42129dbccdac8faa461e8e8cc2ae801101cc6add4ba76ccb752030b0e827"
+ "7352b11cdecebae9cdc9a626c4701cd9c85cd287618888c5fae8b4d0ba48915d"
+ "e5cc64e3aee2ba2862d04348ea71f65454f74f9fd1e3108005cc367ca41585a4";
+ gcry_mpi_t ref_mpi = NULL;
+ gcry_mpi_t sig_mpi = NULL;
+
+ err = _gcry_md_open (&hd, md_algo, 0);
+ if (err)
+ {
+ errtxt = "gcry_md_open failed";
+ goto leave;
+ }
+
+ _gcry_md_write (hd, sample_data, sizeof(sample_data));
+
+ err = _gcry_pk_sign_md (&sig, data_tmpl, hd, skey, NULL);
+ if (err)
+ {
+ errtxt = "signing failed";
+ goto leave;
+ }
+
+ err = _gcry_mpi_scan(&ref_mpi, GCRYMPI_FMT_HEX, ref_data, 0, NULL);
+ if (err)
+ {
+ errtxt = "converting ref_data to mpi failed";
+ goto leave;
+ }
+
+ err = _gcry_sexp_extract_param(sig, "sig-val!rsa", "s", &sig_mpi, NULL);
+ if (err)
+ {
+ errtxt = "extracting signature data failed";
+ goto leave;
+ }
+
+ if (mpi_cmp (sig_mpi, ref_mpi))
+ {
+ errtxt = "signature does not match reference data";
+ goto leave;
+ }
+
+ err = _gcry_pk_verify_md (sig, data_tmpl, hd, pkey, NULL);
+ if (err)
+ {
+ errtxt = "verify failed";
+ goto leave;
+ }
+
+ _gcry_md_reset(hd);
+ _gcry_md_write (hd, sample_data_bad, sizeof(sample_data_bad));
+ err = _gcry_pk_verify_md (sig, data_tmpl, hd, pkey, NULL);
+ if (gcry_err_code (err) != GPG_ERR_BAD_SIGNATURE)
+ {
+ errtxt = "bad signature not detected";
+ goto leave;
+ }
+
+
+ leave:
+ sexp_release (sig);
+ _gcry_md_close (hd);
+ _gcry_mpi_release (ref_mpi);
+ _gcry_mpi_release (sig_mpi);
+ return errtxt;
+}
+
static const char *
selftest_sign_2048 (gcry_sexp_t pkey, gcry_sexp_t skey)
{
static gpg_err_code_t
-selftests_rsa (selftest_report_func_t report)
+selftests_rsa (selftest_report_func_t report, int extended)
{
const char *what;
const char *errtxt;
goto failed;
}
- what = "sign";
- errtxt = selftest_sign_2048 (pkey, skey);
+ if (extended)
+ {
+ what = "sign";
+ errtxt = selftest_sign_2048 (pkey, skey);
+ if (errtxt)
+ goto failed;
+ }
+
+ what = "digest sign";
+ errtxt = selftest_hash_sign_2048 (pkey, skey);
if (errtxt)
goto failed;
{
gpg_err_code_t ec;
- (void)extended;
-
switch (algo)
{
case GCRY_PK_RSA:
- ec = selftests_rsa (report);
+ ec = selftests_rsa (report, extended);
break;
default:
ec = GPG_ERR_PUBKEY_ALGO;
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/resource.h>
-
-int
-main (int argc, char **argv)
-{
- struct rusage buf;
-
- if (argc > 1)
- {
- system (argv[1]);
-
- if (getrusage (RUSAGE_CHILDREN, &buf ))
- {
- perror ("getrusage");
- return 1;
- }
- }
- else
- {
- if (getrusage (RUSAGE_SELF, &buf ))
- {
- perror ("getrusage");
- return 1;
- }
- }
-
- printf ("ru_utime = %ld.%06ld\n",
- buf.ru_utime.tv_sec, buf.ru_utime.tv_usec);
- printf ("ru_stime = %ld.%06ld\n",
- buf.ru_stime.tv_sec, buf.ru_stime.tv_usec);
- printf ("ru_maxrss = %ld\n", buf.ru_maxrss );
- printf ("ru_ixrss = %ld\n", buf.ru_ixrss );
- printf ("ru_idrss = %ld\n", buf.ru_idrss );
- printf ("ru_isrss = %ld\n", buf.ru_isrss );
- printf ("ru_minflt = %ld\n", buf.ru_minflt );
- printf ("ru_majflt = %ld\n", buf.ru_majflt );
- printf ("ru_nswap = %ld\n", buf.ru_nswap );
- printf ("ru_inblock = %ld\n", buf.ru_inblock );
- printf ("ru_oublock = %ld\n", buf.ru_oublock );
- printf ("ru_msgsnd = %ld\n", buf.ru_msgsnd );
- printf ("ru_msgrcv = %ld\n", buf.ru_msgrcv );
- printf ("ru_nsignals= %ld\n", buf.ru_nsignals );
- printf ("ru_nvcsw = %ld\n", buf.ru_nvcsw );
- printf ("ru_nivcsw = %ld\n", buf.ru_nivcsw );
-
- return 0;
-}
-
-
-/* Codesnippet for debugging in random.c. */
-#if 0
-static void
-collect_rusage_stats (struct rusage *rb)
-{
- static int idx;
- static struct rusage buf[100];
-
- if (!rb)
- {
- int i;
-
- fprintf (stderr, "ru_utime ru_stime ru_minflt ru_nvcsw ru_nivcsw\n");
- for (i=0; i < idx; i++)
- fprintf (stderr, "%ld.%06ld %ld.%06ld %5ld %5ld %5ld\n",
- buf[i].ru_utime.tv_sec, buf[i].ru_utime.tv_usec,
- buf[i].ru_stime.tv_sec, buf[i].ru_stime.tv_usec,
- buf[i].ru_minflt,
- buf[i].ru_nvcsw,
- buf[i].ru_nivcsw);
- }
- else if (idx < DIM(buf))
- {
- buf[idx++] = *rb;
- }
-}
-#endif
-/*
- void
- _gcry_random_dump_stats()
- {
-@@ -233,8 +261,11 @@
- rndstats.naddbytes, rndstats.addbytes,
- rndstats.mixkey, rndstats.ngetbytes1, rndstats.getbytes1,
- rndstats.ngetbytes2, rndstats.getbytes2 );
-+
-+ collect_rusage_stats (NULL);
- }
-
-========
-
- getrusage (RUSAGE_SELF, &buf );
-+ collect_rusage_stats (&buf);
- add_randomness( &buf, sizeof buf, 1 );
- memset( &buf, 0, sizeof buf );
- }
-
-*/
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Makefile for compat directory
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+# Process this file with automake to produce Makefile.in
+
+# We use this libcompat to work around problems with LIBOBJ stuff.
+# For example, we need some of the compat files also in tests/ but the
+# suggested way to do this (using the automake option subdir-objects)
+# leads to problems with "make distclean": The distclean target in
+# tests is run before the one src and it removes the deps files of the
+# libobj files which are in src. Now when it comes to run make in src
+# the icnluded files are gone - bummer. Instead of try to fix this
+# issue it seems better not to use subdir-objects but build them all
+# into a compat library and always link against that library. This
+# also avoids the problem that a dependency on LTLIBOBJ is not setup
+# if -- disable-static was used.
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = compat
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am_libcompat_la_OBJECTS = compat.lo
+libcompat_la_OBJECTS = $(am_libcompat_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = $(DEPDIR)/clock.Plo $(DEPDIR)/getpid.Plo \
+ ./$(DEPDIR)/compat.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libcompat_la_SOURCES)
+DIST_SOURCES = $(libcompat_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp clock.c getpid.c
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Need to include ../src in addition to top_srcdir because gcrypt.h is
+# a built header.
+AM_CPPFLAGS = -I../src -I$(top_srcdir)/src $(GPG_ERROR_CFLAGS)
+noinst_LTLIBRARIES = libcompat.la
+
+# We only need one file so that the library is guaranteed to have at
+# least one member.
+libcompat_la_SOURCES = compat.c libcompat.h
+libcompat_la_DEPENDENCIES = @LTLIBOBJS@
+libcompat_la_LIBADD = @LTLIBOBJS@
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu compat/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu compat/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libcompat.la: $(libcompat_la_OBJECTS) $(libcompat_la_DEPENDENCIES) $(EXTRA_libcompat_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libcompat_la_OBJECTS) $(libcompat_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/clock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getpid.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(DEPDIR)/clock.Plo
+ -rm -f $(DEPDIR)/getpid.Plo
+ -rm -f ./$(DEPDIR)/compat.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(DEPDIR)/clock.Plo
+ -rm -f $(DEPDIR)/getpid.Plo
+ -rm -f ./$(DEPDIR)/compat.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# AC_LIBOBJ files are:
+# getpid.c
+# clock.c
+#
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+
+#ifndef _GCRYPT_CONFIG_H_INCLUDED
+#define _GCRYPT_CONFIG_H_INCLUDED
+
+/* Enable gpg-error's strerror macro for W32CE. */
+#define GPG_ERR_ENABLE_ERRNO_MACROS 1
+
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* Defined if --disable-asm was used to configure */
+#undef ASM_DISABLED
+
+/* GIT commit id revision used to build this package */
+#undef BUILD_REVISION
+
+/* The time this package was configured for a build */
+#undef BUILD_TIMESTAMP
+
+/* configure did not test for endianness */
+#undef DISABLED_ENDIAN_CHECK
+
+/* Define if you don't want the default EGD socket name. For details see
+ cipher/rndegd.c */
+#undef EGD_SOCKET_NAME
+
+/* Enable support for Intel AES-NI instructions. */
+#undef ENABLE_AESNI_SUPPORT
+
+/* Enable support for ARMv8 Crypto Extension instructions. */
+#undef ENABLE_ARM_CRYPTO_SUPPORT
+
+/* Enable support for Intel AVX2 instructions. */
+#undef ENABLE_AVX2_SUPPORT
+
+/* Enable support for Intel AVX instructions. */
+#undef ENABLE_AVX_SUPPORT
+
+/* Enable support for Intel DRNG (RDRAND instruction). */
+#undef ENABLE_DRNG_SUPPORT
+
+/* Enable forcing 'soft' HW feature bits on (for testing). */
+#undef ENABLE_FORCE_SOFT_HWFEATURES
+
+/* Define to support an HMAC based integrity check */
+#undef ENABLE_HMAC_BINARY_CHECK
+
+/* Enable support for the jitter entropy collector. */
+#undef ENABLE_JENT_SUPPORT
+
+/* Enable support for ARM NEON instructions. */
+#undef ENABLE_NEON_SUPPORT
+
+/* Enable support for the PadLock engine. */
+#undef ENABLE_PADLOCK_SUPPORT
+
+/* Enable support for Intel PCLMUL instructions. */
+#undef ENABLE_PCLMUL_SUPPORT
+
+/* Enable support for POWER 8 (PowerISA 2.07) crypto extension. */
+#undef ENABLE_PPC_CRYPTO_SUPPORT
+
+/* Enable support for Intel SHAEXT instructions. */
+#undef ENABLE_SHAEXT_SUPPORT
+
+/* Enable support for Intel SSE4.1 instructions. */
+#undef ENABLE_SSE41_SUPPORT
+
+/* Define FIPS module version for certification */
+#undef FIPS_MODULE_VERSION
+
+/* Define to use the GNU C visibility attribute. */
+#undef GCRY_USE_VISIBILITY
+
+/* The default error source for libgcrypt. */
+#undef GPG_ERR_SOURCE_DEFAULT
+
+/* Defined if ARM architecture is v6 or newer */
+#undef HAVE_ARM_ARCH_V6
+
+/* Define to 1 if you have the `atexit' function. */
+#undef HAVE_ATEXIT
+
+/* Defined if the mlock() call does not work */
+#undef HAVE_BROKEN_MLOCK
+
+/* Defined if compiler has '__builtin_bswap32' intrinsic */
+#undef HAVE_BUILTIN_BSWAP32
+
+/* Defined if compiler has '__builtin_bswap64' intrinsic */
+#undef HAVE_BUILTIN_BSWAP64
+
+/* Defined if compiler has '__builtin_clz' intrinsic */
+#undef HAVE_BUILTIN_CLZ
+
+/* Defined if compiler has '__builtin_clzl' intrinsic */
+#undef HAVE_BUILTIN_CLZL
+
+/* Defined if compiler has '__builtin_ctz' intrinsic */
+#undef HAVE_BUILTIN_CTZ
+
+/* Defined if compiler has '__builtin_ctzl' intrinsic */
+#undef HAVE_BUILTIN_CTZL
+
+/* Define to 1 if the system has the type `byte'. */
+#undef HAVE_BYTE
+
+/* Define to 1 if you have the `clock' function. */
+#undef HAVE_CLOCK
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Defined if underlying compiler supports PowerPC AltiVec/VSX/crypto
+ intrinsics */
+#undef HAVE_COMPATIBLE_CC_PPC_ALTIVEC
+
+/* Defined if underlying compiler supports PowerPC AltiVec/VSX/crypto
+ intrinsics with extra GCC flags */
+#undef HAVE_COMPATIBLE_CC_PPC_ALTIVEC_WITH_CFLAGS
+
+/* Defined if underlying assembler is compatible with ARMv8/Aarch64 assembly
+ implementations */
+#undef HAVE_COMPATIBLE_GCC_AARCH64_PLATFORM_AS
+
+/* Defined if underlying assembler is compatible with amd64 assembly
+ implementations */
+#undef HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS
+
+/* Defined if underlying assembler is compatible with ARM assembly
+ implementations */
+#undef HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS
+
+/* Defined if underlying assembler is compatible with WIN64 assembly
+ implementations */
+#undef HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS
+
+/* Defined for Alpha platforms */
+#undef HAVE_CPU_ARCH_ALPHA
+
+/* Defined for ARM AArch64 platforms */
+#undef HAVE_CPU_ARCH_ARM
+
+/* Defined for M68k platforms */
+#undef HAVE_CPU_ARCH_M68K
+
+/* Defined for MIPS platforms */
+#undef HAVE_CPU_ARCH_MIPS
+
+/* Defined for PPC platforms */
+#undef HAVE_CPU_ARCH_PPC
+
+/* Defined for s390x/zSeries platforms */
+#undef HAVE_CPU_ARCH_S390X
+
+/* Defined for SPARC platforms */
+#undef HAVE_CPU_ARCH_SPARC
+
+/* Defined for the x86 platforms */
+#undef HAVE_CPU_ARCH_X86
+
+/* defined if the system supports a random device */
+#undef HAVE_DEV_RANDOM
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* defined if we run on some of the PCDOS like systems (DOS, Windoze. OS/2)
+ with special properties like no file modes */
+#undef HAVE_DOSISH_SYSTEM
+
+/* defined if we must run on a stupid file system */
+#undef HAVE_DRIVE_LETTERS
+
+/* Define to 1 if you have the `elf_aux_info' function. */
+#undef HAVE_ELF_AUX_INFO
+
+/* Define to 1 if you have the `explicit_bzero' function. */
+#undef HAVE_EXPLICIT_BZERO
+
+/* Define to 1 if you have the `explicit_memset' function. */
+#undef HAVE_EXPLICIT_MEMSET
+
+/* Define to 1 if you have the `fcntl' function. */
+#undef HAVE_FCNTL
+
+/* Define to 1 if you have the `flockfile' function. */
+#undef HAVE_FLOCKFILE
+
+/* Define to 1 if you have the `ftruncate' function. */
+#undef HAVE_FTRUNCATE
+
+/* Defined if underlying assembler supports for CFI directives */
+#undef HAVE_GCC_ASM_CFI_DIRECTIVES
+
+/* Defined if underlying assembler supports for ELF directives */
+#undef HAVE_GCC_ASM_ELF_DIRECTIVES
+
+/* Define if inline asm memory barrier is supported */
+#undef HAVE_GCC_ASM_VOLATILE_MEMORY
+
+/* Defined if a GCC style "__attribute__ ((aligned (n))" is supported */
+#undef HAVE_GCC_ATTRIBUTE_ALIGNED
+
+/* Defined if a GCC style "__attribute__ ((may_alias))" is supported */
+#undef HAVE_GCC_ATTRIBUTE_MAY_ALIAS
+
+/* Defined if compiler supports "__attribute__ ((ms_abi))" function attribute
+ */
+#undef HAVE_GCC_ATTRIBUTE_MS_ABI
+
+/* Defined if a GCC style "__attribute__ ((packed))" is supported */
+#undef HAVE_GCC_ATTRIBUTE_PACKED
+
+/* Defined if compiler supports "__attribute__ ((sysv_abi))" function
+ attribute */
+#undef HAVE_GCC_ATTRIBUTE_SYSV_ABI
+
+/* Defined if default calling convention is 'ms_abi' */
+#undef HAVE_GCC_DEFAULT_ABI_IS_MS_ABI
+
+/* Defined if default calling convention is 'sysv_abi' */
+#undef HAVE_GCC_DEFAULT_ABI_IS_SYSV_ABI
+
+/* Defined if inline assembler supports AArch32 Crypto Extension instructions
+ */
+#undef HAVE_GCC_INLINE_ASM_AARCH32_CRYPTO
+
+/* Defined if inline assembler supports AArch64 Crypto Extension instructions
+ */
+#undef HAVE_GCC_INLINE_ASM_AARCH64_CRYPTO
+
+/* Defined if inline assembler supports AArch64 NEON instructions */
+#undef HAVE_GCC_INLINE_ASM_AARCH64_NEON
+
+/* Defined if inline assembler supports AVX instructions */
+#undef HAVE_GCC_INLINE_ASM_AVX
+
+/* Defined if inline assembler supports AVX2 instructions */
+#undef HAVE_GCC_INLINE_ASM_AVX2
+
+/* Defined if inline assembler supports BMI2 instructions */
+#undef HAVE_GCC_INLINE_ASM_BMI2
+
+/* Defined if inline assembler supports NEON instructions */
+#undef HAVE_GCC_INLINE_ASM_NEON
+
+/* Defined if inline assembler supports PCLMUL instructions */
+#undef HAVE_GCC_INLINE_ASM_PCLMUL
+
+/* Defined if inline assembler supports PowerPC AltiVec/VSX/crypto
+ instructions */
+#undef HAVE_GCC_INLINE_ASM_PPC_ALTIVEC
+
+/* Defined if inline assembler supports PowerISA 3.00 instructions */
+#undef HAVE_GCC_INLINE_ASM_PPC_ARCH_3_00
+
+/* Defined if inline assembler supports zSeries instructions */
+#undef HAVE_GCC_INLINE_ASM_S390X
+
+/* Defined if inline assembler supports zSeries vector instructions */
+#undef HAVE_GCC_INLINE_ASM_S390X_VX
+
+/* Defined if inline assembler supports SHA Extensions instructions */
+#undef HAVE_GCC_INLINE_ASM_SHAEXT
+
+/* Defined if inline assembler supports SSE4.1 instructions */
+#undef HAVE_GCC_INLINE_ASM_SSE41
+
+/* Defined if inline assembler supports SSSE3 instructions */
+#undef HAVE_GCC_INLINE_ASM_SSSE3
+
+/* Defined if inline assembler supports VAES and VPCLMUL instructions */
+#undef HAVE_GCC_INLINE_ASM_VAES_VPCLMUL
+
+/* Define to 1 if you have the `getauxval' function. */
+#undef HAVE_GETAUXVAL
+
+/* Define to 1 if you have the `getentropy' function. */
+#undef HAVE_GETENTROPY
+
+/* Define to 1 if you have the `gethrtime' function. */
+#undef HAVE_GETHRTIME
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define to 1 if you have the `getpid' function. */
+#undef HAVE_GETPID
+
+/* Define to 1 if you have the `getrusage' function. */
+#undef HAVE_GETRUSAGE
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Defined if underlying assembler is compatible with Intel syntax assembly
+ implementations */
+#undef HAVE_INTEL_SYNTAX_PLATFORM_AS
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `rt' library (-lrt). */
+#undef HAVE_LIBRT
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <minix/config.h> header file. */
+#undef HAVE_MINIX_CONFIG_H
+
+/* Defined if the system supports an mlock() call */
+#undef HAVE_MLOCK
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Defined if the GNU Pth is available */
+#undef HAVE_PTH
+
+/* Define if we have pthread. */
+#undef HAVE_PTHREAD
+
+/* Define to 1 if you have the `raise' function. */
+#undef HAVE_RAISE
+
+/* Define to 1 if you have the `rand' function. */
+#undef HAVE_RAND
+
+/* Define to 1 if you have the <spawn.h> header file. */
+#undef HAVE_SPAWN_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `stricmp' function. */
+#undef HAVE_STRICMP
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Defined if compiler has '__sync_synchronize' intrinsic */
+#undef HAVE_SYNC_SYNCHRONIZE
+
+/* Define to 1 if you have the `syscall' function. */
+#undef HAVE_SYSCALL
+
+/* Define to 1 if you have the `sysconf' function. */
+#undef HAVE_SYSCONF
+
+/* Define to 1 if you have the `syslog' function. */
+#undef HAVE_SYSLOG
+
+/* Define to 1 if you have the <sys/auxv.h> header file. */
+#undef HAVE_SYS_AUXV_H
+
+/* Define to 1 if you have the <sys/capability.h> header file. */
+#undef HAVE_SYS_CAPABILITY_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/random.h> header file. */
+#undef HAVE_SYS_RANDOM_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if the system has the type `u16'. */
+#undef HAVE_U16
+
+/* Define to 1 if the system has the type `u32'. */
+#undef HAVE_U32
+
+/* Define to 1 if the system has the type `u64'. */
+#undef HAVE_U64
+
+/* Define to 1 if the system has the type `uintptr_t'. */
+#undef HAVE_UINTPTR_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `ushort'. */
+#undef HAVE_USHORT
+
+/* Defined if variable length arrays are supported */
+#undef HAVE_VLA
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Defined if we run on WindowsCE */
+#undef HAVE_W32CE_SYSTEM
+
+/* Defined if we run on a W32 API based system */
+#undef HAVE_W32_SYSTEM
+
+/* Define to 1 if you have the `wait4' function. */
+#undef HAVE_WAIT4
+
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define to 1 if you have the <ws2tcpip.h> header file. */
+#undef HAVE_WS2TCPIP_H
+
+/* Defined if this is not a regular release */
+#undef IS_DEVELOPMENT_VERSION
+
+/* List of available cipher algorithms */
+#undef LIBGCRYPT_CIPHERS
+
+/* List of available digest algorithms */
+#undef LIBGCRYPT_DIGESTS
+
+/* List of available KDF algorithms */
+#undef LIBGCRYPT_KDFS
+
+/* List of available public key cipher algorithms */
+#undef LIBGCRYPT_PUBKEY_CIPHERS
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
+/* Define to use the (obsolete) malloc guarding feature */
+#undef M_GUARD
+
+/* defined to the name of the strong random device */
+#undef NAME_OF_DEV_RANDOM
+
+/* defined to the name of the weaker random device */
+#undef NAME_OF_DEV_URANDOM
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* A human readable text with the name of the OS */
+#undef PRINTABLE_OS_NAME
+
+/* The size of `uint64_t', as computed by sizeof. */
+#undef SIZEOF_UINT64_T
+
+/* The size of `unsigned int', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_INT
+
+/* The size of `unsigned long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG
+
+/* The size of `unsigned long long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG_LONG
+
+/* The size of `unsigned short', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_SHORT
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
+#undef STDC_HEADERS
+
+/* Defined if this module should be included */
+#undef USE_AES
+
+/* Defined if this module should be included */
+#undef USE_ARCFOUR
+
+/* Defined if this module should be included */
+#undef USE_BLAKE2
+
+/* Defined if this module should be included */
+#undef USE_BLOWFISH
+
+/* Defined if this module should be included */
+#undef USE_CAMELLIA
+
+/* define if capabilities should be used */
+#undef USE_CAPABILITIES
+
+/* Defined if this module should be included */
+#undef USE_CAST5
+
+/* Defined if this module should be included */
+#undef USE_CHACHA20
+
+/* Defined if this module should be included */
+#undef USE_CRC
+
+/* Defined if this module should be included */
+#undef USE_DES
+
+/* Defined if this module should be included */
+#undef USE_DSA
+
+/* Defined if this module should be included */
+#undef USE_ECC
+
+/* Defined if this module should be included */
+#undef USE_ELGAMAL
+
+/* Defined if the GNU Portable Thread Library should be used */
+#undef USE_GNU_PTH
+
+/* Defined if this module should be included */
+#undef USE_GOST28147
+
+/* Defined if this module should be included */
+#undef USE_GOST_R_3411_12
+
+/* Defined if this module should be included */
+#undef USE_GOST_R_3411_94
+
+/* Defined if this module should be included */
+#undef USE_IDEA
+
+/* Defined if this module should be included */
+#undef USE_MD2
+
+/* Defined if this module should be included */
+#undef USE_MD4
+
+/* Defined if this module should be included */
+#undef USE_MD5
+
+/* set this to limit filenames to the 8.3 format */
+#undef USE_ONLY_8DOT3
+
+/* defined if we use posix_spawn in test program */
+#undef USE_POSIX_SPAWN_FOR_TESTS
+
+/* Defined if this module should be included */
+#undef USE_RFC2268
+
+/* Defined if this module should be included */
+#undef USE_RMD160
+
+/* Defined if the EGD based RNG should be used. */
+#undef USE_RNDEGD
+
+/* Defined if the getentropy RNG should be used. */
+#undef USE_RNDGETENTROPY
+
+/* Defined if the /dev/random RNG should be used. */
+#undef USE_RNDOLDLINUX
+
+/* Defined if the default Unix RNG should be used. */
+#undef USE_RNDUNIX
+
+/* Defined if the Windows specific RNG should be used. */
+#undef USE_RNDW32
+
+/* Defined if the WindowsCE specific RNG should be used. */
+#undef USE_RNDW32CE
+
+/* Defined if this module should be included */
+#undef USE_RSA
+
+/* Defined if this module should be included */
+#undef USE_SALSA20
+
+/* Defined if this module should be included */
+#undef USE_SCRYPT
+
+/* Defined if this module should be included */
+#undef USE_SEED
+
+/* Defined if this module should be included */
+#undef USE_SERPENT
+
+/* Defined if this module should be included */
+#undef USE_SHA1
+
+/* Defined if this module should be included */
+#undef USE_SHA256
+
+/* Defined if this module should be included */
+#undef USE_SHA3
+
+/* Defined if this module should be included */
+#undef USE_SHA512
+
+/* Defined if this module should be included */
+#undef USE_SM3
+
+/* Defined if this module should be included */
+#undef USE_SM4
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+# undef _MINIX
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+# undef _POSIX_SOURCE
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+# undef _POSIX_1_SOURCE
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+
+
+/* Defined if this module should be included */
+#undef USE_TIGER
+
+/* Defined if this module should be included */
+#undef USE_TWOFISH
+
+/* Defined if this module should be included */
+#undef USE_WHIRLPOOL
+
+/* Version number of package */
+#undef VERSION
+
+/* Defined if compiled symbols have a leading underscore */
+#undef WITH_SYMBOL_UNDERSCORE
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+ significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+# define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+# undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Expose all libc features (__DARWIN_C_FULL). */
+#undef _DARWIN_C_SOURCE
+
+/* To allow the use of Libgcrypt in multithreaded programs we have to use
+ special features from the library. */
+#ifndef _REENTRANT
+# define _REENTRANT 1
+#endif
+
+
+/* Define to supported assembler block keyword, if plain 'asm' was not
+ supported */
+#undef asm
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define as a signed integer type capable of holding a process identifier. */
+#undef pid_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* type to use in place of socklen_t if not defined */
+#undef socklen_t
+
+/* Define to the type of an unsigned integer type wide enough to hold a
+ pointer, if such a type exists, and if the system does not define it. */
+#undef uintptr_t
+
+
+#define _GCRYPT_IN_LIBGCRYPT 1
+
+/* Add .note.gnu.property section for Intel CET in assembler sources
+ when CET is enabled. */
+#if defined(__ASSEMBLER__) && defined(__CET__)
+# include <cet.h>
+#endif
+
+/* If the configure check for endianness has been disabled, get it from
+ OS macros. This is intended for making fat binary builds on OS X. */
+#ifdef DISABLED_ENDIAN_CHECK
+# if defined(__BIG_ENDIAN__)
+# define WORDS_BIGENDIAN 1
+# elif defined(__LITTLE_ENDIAN__)
+# undef WORDS_BIGENDIAN
+# else
+# error "No endianness found"
+# endif
+#endif /*DISABLED_ENDIAN_CHECK*/
+
+/* We basically use the original Camellia source. Make sure the symbols
+ properly prefixed. */
+#define CAMELLIA_EXT_SYM_PREFIX _gcry_
+
+#endif /*_GCRYPT_CONFIG_H_INCLUDED*/
+
--- /dev/null
+#! /bin/sh
+# From configure.ac Revision.
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.71 for libgcrypt 1.10.3.
+#
+# Report bugs to <https://bugs.gnupg.org>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else \$as_nop
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
+
+else \$as_nop
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null
+then :
+ as_have_required=yes
+else $as_nop
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
+
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
+
+
+ if test "x$CONFIG_SHELL" != x
+then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and
+$0: https://bugs.gnupg.org about your system, including any
+$0: error possibly output before this message. Then install
+$0: a modern shell, or manually run the script under such a
+$0: shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='libgcrypt'
+PACKAGE_TARNAME='libgcrypt'
+PACKAGE_VERSION='1.10.3'
+PACKAGE_STRING='libgcrypt 1.10.3'
+PACKAGE_BUGREPORT='https://bugs.gnupg.org'
+PACKAGE_URL=''
+
+ac_unique_file="src/libgcrypt.vers"
+ac_config_libobj_dir=compat
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_c_list=
+ac_func_c_list=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+BUILD_TIMESTAMP
+BUILD_FILEVERSION
+BUILD_VERSION
+BUILD_REVISION
+BUILD_DOC_FALSE
+BUILD_DOC_TRUE
+GCRYPT_HWF_MODULES
+LIBGCRYPT_DIGESTS
+LIBGCRYPT_PUBKEY_CIPHERS
+LIBGCRYPT_CIPHERS
+GCRYPT_RANDOM
+GCRYPT_KDFS
+GCRYPT_DIGESTS
+GCRYPT_PUBKEY_CIPHERS
+GCRYPT_CIPHERS
+USE_ECC_FALSE
+USE_ECC_TRUE
+USE_ELGAMAL_FALSE
+USE_ELGAMAL_TRUE
+USE_RSA_FALSE
+USE_RSA_TRUE
+USE_DSA_FALSE
+USE_DSA_TRUE
+LIBGCRYPT_THREAD_MODULES
+LIBGCRYPT_CONFIG_HOST
+LIBGCRYPT_CONFIG_CFLAGS
+LIBGCRYPT_CONFIG_LIBS
+LIBGCRYPT_CONFIG_API_VERSION
+NOEXECSTACK_FLAGS
+CROSS_COMPILING_FALSE
+CROSS_COMPILING_TRUE
+DL_LIBS
+LIBOBJS
+ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_FALSE
+ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_TRUE
+MPI_MOD_C_UDIV_QRNND_FALSE
+MPI_MOD_C_UDIV_QRNND_TRUE
+MPI_MOD_C_UDIV_FALSE
+MPI_MOD_C_UDIV_TRUE
+MPI_MOD_C_MPIH_RSHIFT_FALSE
+MPI_MOD_C_MPIH_RSHIFT_TRUE
+MPI_MOD_C_MPIH_LSHIFT_FALSE
+MPI_MOD_C_MPIH_LSHIFT_TRUE
+MPI_MOD_C_MPIH_MUL3_FALSE
+MPI_MOD_C_MPIH_MUL3_TRUE
+MPI_MOD_C_MPIH_MUL2_FALSE
+MPI_MOD_C_MPIH_MUL2_TRUE
+MPI_MOD_C_MPIH_MUL1_FALSE
+MPI_MOD_C_MPIH_MUL1_TRUE
+MPI_MOD_C_MPIH_SUB1_FALSE
+MPI_MOD_C_MPIH_SUB1_TRUE
+MPI_MOD_C_MPIH_ADD1_FALSE
+MPI_MOD_C_MPIH_ADD1_TRUE
+MPI_MOD_ASM_UDIV_QRNND_FALSE
+MPI_MOD_ASM_UDIV_QRNND_TRUE
+MPI_MOD_ASM_UDIV_FALSE
+MPI_MOD_ASM_UDIV_TRUE
+MPI_MOD_ASM_MPIH_RSHIFT_FALSE
+MPI_MOD_ASM_MPIH_RSHIFT_TRUE
+MPI_MOD_ASM_MPIH_LSHIFT_FALSE
+MPI_MOD_ASM_MPIH_LSHIFT_TRUE
+MPI_MOD_ASM_MPIH_MUL3_FALSE
+MPI_MOD_ASM_MPIH_MUL3_TRUE
+MPI_MOD_ASM_MPIH_MUL2_FALSE
+MPI_MOD_ASM_MPIH_MUL2_TRUE
+MPI_MOD_ASM_MPIH_MUL1_FALSE
+MPI_MOD_ASM_MPIH_MUL1_TRUE
+MPI_MOD_ASM_MPIH_SUB1_FALSE
+MPI_MOD_ASM_MPIH_SUB1_TRUE
+MPI_MOD_ASM_MPIH_ADD1_FALSE
+MPI_MOD_ASM_MPIH_ADD1_TRUE
+MPI_SFLAGS
+PTH_LIBS
+PTH_CFLAGS
+PTH_CONFIG
+GPG_ERROR_MT_LIBS
+GPG_ERROR_MT_CFLAGS
+GPG_ERROR_LIBS
+GPG_ERROR_CFLAGS
+GPGRT_CONFIG
+GPG_ERROR_CONFIG
+HAVE_LD_VERSION_SCRIPT_FALSE
+HAVE_LD_VERSION_SCRIPT_TRUE
+ENABLE_INSTRUMENTATION_MUNGING_FALSE
+ENABLE_INSTRUMENTATION_MUNGING_TRUE
+ENABLE_O_FLAG_MUNGING_FALSE
+ENABLE_O_FLAG_MUNGING_TRUE
+DEF_HMAC_BINARY_CHECK
+USE_HMAC_BINARY_CHECK_FALSE
+USE_HMAC_BINARY_CHECK_TRUE
+READELF
+OBJCOPY
+RUN_LARGE_DATA_TESTS
+ENABLE_RANDOM_DAEMON_FALSE
+ENABLE_RANDOM_DAEMON_TRUE
+emacs_local_vars_end
+emacs_local_vars_read_only
+emacs_local_vars_begin
+HAVE_W32CE_SYSTEM_FALSE
+HAVE_W32CE_SYSTEM_TRUE
+HAVE_W32_SYSTEM_FALSE
+HAVE_W32_SYSTEM_TRUE
+RC
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+EXEEXT_FOR_BUILD
+CC_FOR_BUILD
+VERSION_NUMBER
+LDADD_FOR_TESTS_KLUDGE
+am__fastdepCCAS_FALSE
+am__fastdepCCAS_TRUE
+CCASDEPMODE
+CCASFLAGS
+CCAS
+CPP
+SYSROOT
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+CSCOPE
+ETAGS
+CTAGS
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+LIBGCRYPT_LT_REVISION
+LIBGCRYPT_LT_AGE
+LIBGCRYPT_LT_CURRENT
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+runstatedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL
+am__quote'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_maintainer_mode
+enable_dependency_tracking
+enable_static
+enable_shared
+with_pic
+enable_fast_install
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_endian_check
+enable_ciphers
+enable_pubkey_ciphers
+enable_digests
+enable_kdfs
+enable_random
+enable_dev_random
+with_egd_socket
+enable_random_daemon
+enable_asm
+enable_m_guard
+enable_large_data_tests
+enable_force_soft_hwfeatures
+with_capabilities
+enable_hmac_binary_check
+with_fips_module_version
+enable_jent_support
+enable_padlock_support
+enable_aesni_support
+enable_shaext_support
+enable_pclmul_support
+enable_sse41_support
+enable_drng_support
+enable_avx_support
+enable_avx2_support
+enable_neon_support
+enable_arm_crypto_support
+enable_ppc_crypto_support
+enable_O_flag_munging
+enable_instrumentation_munging
+enable_amd64_as_feature_detection
+enable_ld_version_script
+with_libtool_modification
+with_libgpg_error_prefix
+with_gpg_error_prefix
+with_pth_prefix
+enable_mpi_path
+enable_optimization
+enable_noexecstack
+enable_doc
+enable_build_timestamp
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+SYSROOT
+CPP
+CCAS
+CCASFLAGS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir runstatedir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures libgcrypt 1.10.3 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/libgcrypt]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of libgcrypt 1.10.3:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-static[=PKGS] build static libraries [default=no]
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-endian-check disable the endian check and trust the OS provided
+ macros
+ --enable-ciphers=ciphers
+ select the symmetric ciphers to include
+ --enable-pubkey-ciphers=ciphers
+ select the public-key ciphers to include
+ --enable-digests=digests
+ select the message digests to include
+ --enable-kfds=kdfs select the KDFs to include
+ --enable-random=name select which random number generator to use
+ --disable-dev-random disable the use of dev random
+ --enable-random-daemon Build the experimental gcryptrnd
+ --disable-asm Disable MPI and cipher assembler modules
+ --enable-m-guard Enable memory guard facility
+ --enable-large-data-tests
+ Enable the real long ruinning large data tests
+ --enable-force-soft-hwfeatures
+ Enable forcing 'soft' HW feature bits on
+ --enable-hmac-binary-check
+ Enable library integrity check
+ --disable-jent-support Disable support for the Jitter entropy collector
+ --disable-padlock-support
+ Disable support for the PadLock Engine of VIA
+ processors
+ --disable-aesni-support Disable support for the Intel AES-NI instructions
+ --disable-shaext-support
+ Disable support for the Intel SHAEXT instructions
+ --disable-pclmul-support
+ Disable support for the Intel PCLMUL instructions
+ --disable-sse41-support Disable support for the Intel SSE4.1 instructions
+ --disable-drng-support Disable support for the Intel DRNG (RDRAND
+ instruction)
+ --disable-avx-support Disable support for the Intel AVX instructions
+ --disable-avx2-support Disable support for the Intel AVX2 instructions
+ --disable-neon-support Disable support for the ARM NEON instructions
+ --disable-arm-crypto-support
+ Disable support for the ARMv8 Crypto Extension
+ instructions
+ --disable-ppc-crypto-support
+ Disable support for the PPC crypto instructions
+ introduced in POWER 8 (PowerISA 2.07)
+ --disable-O-flag-munging
+ Disable modification of the cc -O flag
+ --disable-instrumentation-munging
+ Disable modification of the cc instrumentation
+ options
+ --disable-amd64-as-feature-detection
+ Disable the auto-detection of AMD64 as(1) features
+ --enable-ld-version-script
+ enable/disable use of linker version script.
+ (default is system dependent)
+ --enable-mpi-path=EXTRA_PATH
+ prepend EXTRA_PATH to list of CPU specific
+ optimizations
+ --disable-optimization disable compiler optimization
+ --disable-noexecstack disable non executable stack support
+ --disable-doc do not build the documentation
+ --enable-build-timestamp
+ set an explicit build timestamp for reproducibility.
+ (default is the current time in ISO-8601 format)
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-sysroot=DIR Search for dependent libraries within DIR
+ (or the compiler's sysroot if not specified).
+ --with-egd-socket=NAME Use NAME for the EGD socket)
+ --with-capabilities Use linux capabilities [default=no]
+ --with-fips-module-version=VERSION
+ Specify the FIPS module version for the build
+ --with-libtool-modification=apply|never|try
+ how to handle libtool modification (default=never)
+ --with-libgpg-error-prefix=PFX
+ prefix where GPG Error is installed (optional)
+
+ --with-pth-prefix=PFX prefix where GNU Pth is installed (optional)
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ SYSROOT locate config scripts also below that directory
+ CPP C preprocessor
+ CCAS assembler compiler command (defaults to CC)
+ CCASFLAGS assembler compiler flags (defaults to CFLAGS)
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <https://bugs.gnupg.org>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+libgcrypt configure 1.10.3
+generated by GNU Autoconf 2.71
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below. */
+
+#include <limits.h>
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main (void)
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=$ac_mid; break
+else $as_nop
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_lo=$ac_mid; break
+else $as_nop
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+else $as_nop
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=$ac_mid
+else $as_nop
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main (void)
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else $as_nop
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by libgcrypt $as_me 1.10.3, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ $ $0$ac_configure_args_raw
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ printf "%s\n" "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ printf "%s\n" "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ printf "%s\n" "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ printf "%s\n" "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+printf "%s\n" "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+ ac_site_files="$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
+else
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+fi
+
+for ac_site_file in $ac_site_files
+do
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
+as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
+as_fn_append ac_header_c_list " sys/socket.h sys_socket_h HAVE_SYS_SOCKET_H"
+as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="ltmain.sh compile config.guess config.sub missing install-sh"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}/build-aux"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# LT Version numbers, remember to change them just *before* a release.
+# (Code changed: REVISION++)
+# (Interfaces added/removed/changed: CURRENT++, REVISION=0)
+# (Interfaces added: AGE++)
+# (Interfaces removed: AGE=0)
+#
+# (Interfaces removed: CURRENT++, AGE=0, REVISION=0)
+# (Interfaces added: CURRENT++, AGE++, REVISION=0)
+# (No interfaces changed: REVISION++)
+LIBGCRYPT_LT_CURRENT=24
+LIBGCRYPT_LT_AGE=4
+LIBGCRYPT_LT_REVISION=3
+################################################
+
+
+
+
+
+# If the API is changed in an incompatible way: increment the next counter.
+#
+# 1.6: ABI and API change but the change is to most users irrelevant
+# and thus the API version number has not been incremented.
+LIBGCRYPT_CONFIG_API_VERSION=1
+
+# If you change the required gpg-error version, please remove
+# unnecessary error code defines in src/gcrypt-int.h.
+NEED_GPG_ERROR_VERSION=1.27
+
+
+
+am__api_version='1.16'
+
+
+
+ # Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test ${ac_cv_path_install+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+ ./ | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test ${ac_cv_path_install+y}; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+printf %s "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"`
+
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+
+ if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
+printf %s "checking for a race-free mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test ${ac_cv_path_mkdir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir ('*'coreutils) '* | \
+ 'BusyBox '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test ${ac_cv_path_mkdir+y}; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+printf "%s\n" "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AWK+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+printf "%s\n" "$AWK" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ SET_MAKE=
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='libgcrypt'
+ VERSION='1.10.3'
+
+
+printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
+
+
+printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test ${enable_maintainer_mode+y}
+then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else $as_nop
+ USE_MAINTAINER_MODE=no
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+printf "%s\n" "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+
+
+
+
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+printf "%s\n" "${_am_result}" >&6; }
+
+# Check whether --enable-dependency-tracking was given.
+if test ${enable_dependency_tracking+y}
+then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else $as_nop
+ ac_file=''
+fi
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main (void)
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
+do
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
+ fi
+done
+
+
+
+
+
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test ${ac_cv_safe_to_define___extensions__+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_safe_to_define___extensions__=yes
+else $as_nop
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if test ${ac_cv_should_define__xopen_source+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_should_define__xopen_source=no
+ if test $ac_cv_header_wchar_h = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define _XOPEN_SOURCE 500
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_should_define__xopen_source=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
+
+ printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
+
+ printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
+
+ printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+ if test $ac_cv_header_minix_config_h = yes
+then :
+ MINIX=yes
+ printf "%s\n" "#define _MINIX 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+else $as_nop
+ MINIX=
+fi
+ if test $ac_cv_safe_to_define___extensions__ = yes
+then :
+ printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
+
+fi
+ if test $ac_cv_should_define__xopen_source = yes
+then :
+ printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+######################
+## Basic checks. ### (we need some results later on (e.g. $GCC)
+######################
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ SET_MAKE=
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+missing_dir=`cd $ac_aux_dir && pwd`
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+# AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# By default we simply use the C compiler to build assembly code.
+
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+
+
+
+depcc="$CCAS" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CCAS_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CCAS_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CCAS_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CCAS_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+ am__fastdepCCAS_TRUE=
+ am__fastdepCCAS_FALSE='#'
+else
+ am__fastdepCCAS_TRUE='#'
+ am__fastdepCCAS_FALSE=
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+printf %s "checking for library containing strerror... " >&6; }
+if test ${ac_cv_search_strerror+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char strerror ();
+int
+main (void)
+{
+return strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' cposix
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_strerror=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_strerror+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_strerror+y}
+then :
+
+else $as_nop
+ ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
+printf "%s\n" "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AWK+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+printf "%s\n" "$AWK" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+
+# Taken from mpfr-4.0.1, then modified for LDADD_FOR_TESTS_KLUDGE
+case $host in
+ *-*-linux*)
+ if test -n "$LD_LIBRARY_PATH"; then
+ saved_LDFLAGS="$LDFLAGS"
+ LDADD_FOR_TESTS_KLUDGE="-Wl,--disable-new-dtags"
+ LDFLAGS="$LDFLAGS $LDADD_FOR_TESTS_KLUDGE"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether --disable-new-dtags is supported by the linker" >&5
+printf %s "checking whether --disable-new-dtags is supported by the linker... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int main (void) { return 0; }
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (use it since LD_LIBRARY_PATH is set)" >&5
+printf "%s\n" "yes (use it since LD_LIBRARY_PATH is set)" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ LDADD_FOR_TESTS_KLUDGE=""
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$saved_LDFLAGS"
+ fi
+ ;;
+esac
+
+
+VERSION_NUMBER=0x010a03
+
+
+# We need to compile and run a program on the build machine.
+# Put a plausible default for CC_FOR_BUILD in Makefile.
+if test -z "$CC_FOR_BUILD"; then
+ if test "x$cross_compiling" = "xno"; then
+ CC_FOR_BUILD='$(CC)'
+ else
+ CC_FOR_BUILD=gcc
+ fi
+fi
+
+# Also set EXEEXT_FOR_BUILD.
+if test "x$cross_compiling" = "xno"; then
+ EXEEXT_FOR_BUILD='$(EXEEXT)'
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5
+printf %s "checking for build system executable suffix... " >&6; }
+if test ${bfd_cv_build_exeext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f conftest*
+ echo 'int main (void) { return 0; }' > conftest.c
+ bfd_cv_build_exeext=
+ ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
+ for file in conftest.*; do
+ case $file in
+ *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+ *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;;
+ esac
+ done
+ rm -f conftest*
+ test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_build_exeext" >&5
+printf "%s\n" "$bfd_cv_build_exeext" >&6; }
+ EXEEXT_FOR_BUILD=""
+ test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext}
+fi
+
+
+
+
+case `pwd` in
+ *\ * | *\ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.2'
+macro_revision='1.3337'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+printf %s "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case "$ECHO" in
+ printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+printf "%s\n" "printf" >&6; } ;;
+ print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+printf "%s\n" "print -r" >&6; } ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+printf "%s\n" "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in sed gsed
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+printf %s "checking for fgrep... " >&6; }
+if test ${ac_cv_path_FGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in fgrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+printf "%s\n" "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test ${with_gnu_ld+y}
+then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else $as_nop
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
+fi
+if test ${lt_cv_path_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${lt_cv_prog_gnu_ld+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test ${lt_cv_path_NM+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+printf "%s\n" "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DUMPBIN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+printf "%s\n" "$DUMPBIN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+printf "%s\n" "$ac_ct_DUMPBIN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+printf %s "checking the name lister ($NM) interface... " >&6; }
+if test ${lt_cv_nm_interface+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+printf "%s\n" "$lt_cv_nm_interface" >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+printf %s "checking the maximum length of command line arguments... " >&6; }
+if test ${lt_cv_sys_max_cmd_len+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+printf %s "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+printf "%s\n" "$xsi_shell" >&6; }
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+printf %s "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+printf "%s\n" "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+printf %s "checking how to convert $build file names to $host format... " >&6; }
+if test ${lt_cv_to_host_file_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+printf %s "checking how to convert $build file names to toolchain format... " >&6; }
+if test ${lt_cv_to_tool_file_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+printf %s "checking for $LD option to reload object files... " >&6; }
+if test ${lt_cv_ld_reload_flag+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_reload_flag='-r'
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test "$GCC" != yes; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+printf "%s\n" "$OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+printf %s "checking how to recognize dependent libraries... " >&6; }
+if test ${lt_cv_deplibs_check_method+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+printf "%s\n" "$DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+printf %s "checking how to associate runtime and link libraries... " >&6; }
+if test ${lt_cv_sharedlib_from_linklib_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh
+ # decide which to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+ ;;
+esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+printf %s "checking for archiver @FILE support... " >&6; }
+if test ${lt_cv_ar_at_file+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ar_at_file=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -eq 0; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test "$ac_status" -ne 0; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+printf "%s\n" "$lt_cv_ar_at_file" >&6; }
+
+if test "x$lt_cv_ar_at_file" = xno; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+printf %s "checking command to parse $NM output from $compiler object... " >&6; }
+if test ${lt_cv_sys_global_symbol_pipe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+printf "%s\n" "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+printf %s "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test ${with_sysroot+y}
+then :
+ withval=$with_sysroot;
+else $as_nop
+ with_sysroot=no
+fi
+
+
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+ if test "$GCC" = yes; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
+printf "%s\n" "${with_sysroot}" >&6; }
+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+ ;;
+esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+printf "%s\n" "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test ${enable_libtool_lock+y}
+then :
+ enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ powerpc64le-*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+printf %s "checking whether the C compiler needs -belf... " >&6; }
+if test ${lt_cv_cc_needs_belf+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_cc_needs_belf=yes
+else $as_nop
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD="${LD-ld}_sol2"
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_MANIFEST_TOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$MANIFEST_TOOL"; then
+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+printf "%s\n" "$MANIFEST_TOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+ # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_MANIFEST_TOOL"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
+ MANIFEST_TOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+ fi
+else
+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if test ${lt_cv_path_mainfest_tool+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&5
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; }
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+ MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DSYMUTIL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+printf "%s\n" "$DSYMUTIL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+printf "%s\n" "$ac_ct_DSYMUTIL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_NMEDIT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+printf "%s\n" "$NMEDIT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_NMEDIT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+printf "%s\n" "$ac_ct_NMEDIT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LIPO+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+printf "%s\n" "$LIPO" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LIPO+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+printf "%s\n" "$ac_ct_LIPO" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+printf "%s\n" "$OTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+printf "%s\n" "$ac_ct_OTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+printf "%s\n" "$OTOOL64" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+printf "%s\n" "$ac_ct_OTOOL64" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+printf %s "checking for -single_module linker flag... " >&6; }
+if test ${lt_cv_apple_cc_single_mod+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&5
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+printf %s "checking for -exported_symbols_list linker flag... " >&6; }
+if test ${lt_cv_ld_exported_symbols_list+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_ld_exported_symbols_list=yes
+else $as_nop
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+printf %s "checking for -force_load linker flag... " >&6; }
+if test ${lt_cv_ld_force_load+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR cru libconftest.a conftest.o" >&5
+ $AR cru libconftest.a conftest.o 2>&5
+ echo "$RANLIB libconftest.a" >&5
+ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&5
+ elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+printf "%s\n" "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*)
+ case ${MACOSX_DEPLOYMENT_TARGET},$host in
+ 10.[012]*,*|,*powerpc*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
+
+fi
+
+
+
+
+
+# Set options
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AS+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AS"; then
+ ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AS="${ac_tool_prefix}as"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+printf "%s\n" "$AS" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+ ac_ct_AS=$AS
+ # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AS+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_AS"; then
+ ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AS="as"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+printf "%s\n" "$ac_ct_AS" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_AS" = x; then
+ AS="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AS=$ac_ct_AS
+ fi
+else
+ AS="$ac_cv_prog_AS"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+printf "%s\n" "$DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+printf "%s\n" "$OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+ ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+# Check whether --enable-static was given.
+if test ${enable_static+y}
+then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else $as_nop
+ enable_static=no
+fi
+
+
+
+
+
+
+
+
+
+
+ enable_dlopen=no
+
+
+
+ # Check whether --enable-shared was given.
+if test ${enable_shared+y}
+then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else $as_nop
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test ${with_pic+y}
+then :
+ withval=$with_pic; lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for lt_pkg in $withval; do
+ IFS="$lt_save_ifs"
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else $as_nop
+ pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test ${enable_fast_install+y}
+then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac
+else $as_nop
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+printf %s "checking for objdir... " >&6; }
+if test ${lt_cv_objdir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+printf "%s\n" "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+printf %s "checking for ${ac_tool_prefix}file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+printf %s "checking for file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test ${lt_cv_prog_compiler_rtti_exceptions+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+ if test "$GCC" = yes; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ if test -n "$lt_prog_compiler_pic"; then
+ lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Intel*\ [CF]*Compiler*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ *Portland\ Group*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+printf %s "checking for $compiler option to produce PIC... " >&6; }
+if test ${lt_cv_prog_compiler_pic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test ${lt_cv_prog_compiler_pic_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test ${lt_cv_prog_compiler_static_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+printf %s "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+printf "%s\n" "$hard_links" >&6; }
+ if test "$hard_links" = no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+printf "%s\n" "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ linux* | k*bsd*-gnu | gnu*)
+ link_all_deplibs=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='${wl}--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ archive_expsym_cmds='if test "x`$SED \"$sed_uncomment_deffile\" $export_symbols | $SED 1q`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = no; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ link_all_deplibs=no
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ export_dynamic_flag_spec='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if test ${lt_cv_aix_libpath_+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_="/usr/lib:/lib"
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if test ${lt_cv_aix_libpath_+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_="/usr/lib:/lib"
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' ${wl}-bernotok'
+ allow_undefined_flag=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ file_list_spec='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ archive_expsym_cmds='if test "x`$SED \"$sed_uncomment_deffile\" $export_symbols | $SED 1q`" = xEXPORTS; then
+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+ enable_shared_with_static_runtimes=yes
+ exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ old_postinstall_cmds='chmod 644 $oldlib'
+ postlink_cmds='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ enable_shared_with_static_runtimes=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+printf %s "checking if $CC understands -b... " >&6; }
+if test ${lt_cv_prog_compiler__b+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+printf "%s\n" "$lt_cv_prog_compiler__b" >&6; }
+
+if test x"$lt_cv_prog_compiler__b" = xyes; then
+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if test ${lt_cv_irix_exported_symbol+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_irix_exported_symbol=yes
+else $as_nop
+ lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS="$save_LDFLAGS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
+ if test "$lt_cv_irix_exported_symbol" = yes; then
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ netbsd* | netbsdelf*-gnu)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case $host_os in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='${wl}-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='${wl}-z,text'
+ allow_undefined_flag='${wl}-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='${wl}-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+printf "%s\n" "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+printf %s "checking whether -lc should be explicitly linked in... " >&6; }
+if test ${lt_cv_archive_cmds_need_lc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+printf %s "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='${libname}.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec="$LIB"
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if test ${lt_cv_shlibpath_overrides_runpath+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
+then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+printf "%s\n" "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+printf %s "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test "X$hardcode_automatic" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+printf "%s\n" "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+ test "$inherit_rpath" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dl_dlopen=yes
+else $as_nop
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else $as_nop
+
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes
+then :
+ lt_cv_dlopen="shl_load"
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+printf %s "checking for shl_load in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_shl_load+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main (void)
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dld_shl_load=yes
+else $as_nop
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes
+then :
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else $as_nop
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes
+then :
+ lt_cv_dlopen="dlopen"
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dl_dlopen=yes
+else $as_nop
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+printf %s "checking for dlopen in -lsvld... " >&6; }
+if test ${ac_cv_lib_svld_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_svld_dlopen=yes
+else $as_nop
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes
+then :
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+printf %s "checking for dld_link in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_dld_link+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main (void)
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dld_dld_link=yes
+else $as_nop
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes
+then :
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+printf %s "checking whether a program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+printf "%s\n" "$lt_cv_dlopen_self" >&6; }
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+printf %s "checking whether a statically linked program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self_static+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+printf %s "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ fi
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report which library types will actually be built
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+printf %s "checking if libtool supports shared libraries... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+printf "%s\n" "$can_build_shared" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+printf %s "checking whether to build shared libraries... " >&6; }
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+printf "%s\n" "$enable_shared" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+printf %s "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+printf "%s\n" "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
+set dummy ${ac_tool_prefix}windres; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$RC"; then
+ ac_cv_prog_RC="$RC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RC="${ac_tool_prefix}windres"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RC=$ac_cv_prog_RC
+if test -n "$RC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RC" >&5
+printf "%s\n" "$RC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RC"; then
+ ac_ct_RC=$RC
+ # Extract the first word of "windres", so it can be a program name with args.
+set dummy windres; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_RC"; then
+ ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RC="windres"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RC=$ac_cv_prog_ac_ct_RC
+if test -n "$ac_ct_RC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5
+printf "%s\n" "$ac_ct_RC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_RC" = x; then
+ RC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RC=$ac_ct_RC
+ fi
+else
+ RC="$ac_cv_prog_RC"
+fi
+
+
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+compiler_RC=$CC
+for cc_temp in $compiler""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+
+lt_cv_prog_compiler_c_o_RC=yes
+
+if test -n "$compiler"; then
+ :
+
+
+
+fi
+
+GCC=$lt_save_GCC
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+
+
+
+##########################
+## General definitions. ##
+##########################
+
+# Used by libgcrypt-config
+LIBGCRYPT_CONFIG_LIBS="-lgcrypt"
+LIBGCRYPT_CONFIG_CFLAGS=""
+LIBGCRYPT_CONFIG_HOST="$host"
+
+# Definitions for symmetric ciphers.
+available_ciphers="arcfour blowfish cast5 des aes twofish serpent rfc2268 seed"
+available_ciphers="$available_ciphers camellia idea salsa20 gost28147 chacha20"
+available_ciphers="$available_ciphers sm4"
+enabled_ciphers=""
+
+# Definitions for public-key ciphers.
+available_pubkey_ciphers="dsa elgamal rsa ecc"
+enabled_pubkey_ciphers=""
+
+# Definitions for message digests.
+available_digests="crc gostr3411-94 md2 md4 md5 rmd160 sha1 sha256 sha512"
+available_digests="$available_digests sha3 tiger whirlpool stribog blake2"
+available_digests="$available_digests sm3"
+enabled_digests=""
+
+# Definitions for kdfs (optional ones)
+available_kdfs="s2k pkdf2 scrypt"
+enabled_kdfs=""
+
+# Definitions for random modules.
+available_random_modules="getentropy linux egd unix"
+auto_random_modules="$available_random_modules"
+
+# Supported thread backends.
+LIBGCRYPT_THREAD_MODULES=""
+
+# Other definitions.
+have_w32_system=no
+have_w32ce_system=no
+have_pthread=no
+
+
+# Setup some stuff depending on host.
+case "${host}" in
+ *-*-mingw32*)
+ ac_cv_have_dev_random=no
+ have_w32_system=yes
+ case "${host}" in
+ *-mingw32ce*)
+ have_w32ce_system=yes
+ available_random_modules="w32ce"
+ ;;
+ *)
+ available_random_modules="w32"
+ ;;
+ esac
+
+printf "%s\n" "#define USE_ONLY_8DOT3 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_DRIVE_LETTERS 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_DOSISH_SYSTEM 1" >>confdefs.h
+
+ ;;
+
+ i?86-emx-os2 | i?86-*-os2*emx)
+ # OS/2 with the EMX environment
+ ac_cv_have_dev_random=no
+ printf "%s\n" "#define HAVE_DRIVE_LETTERS 1" >>confdefs.h
+
+ printf "%s\n" "#define HAVE_DOSISH_SYSTEM 1" >>confdefs.h
+
+ ;;
+
+ i?86-*-msdosdjgpp*)
+ # DOS with the DJGPP environment
+ ac_cv_have_dev_random=no
+ printf "%s\n" "#define HAVE_DRIVE_LETTERS 1" >>confdefs.h
+
+ printf "%s\n" "#define HAVE_DOSISH_SYSTEM 1" >>confdefs.h
+
+ ;;
+
+ *-*-hpux*)
+ if test -z "$GCC" ; then
+ CFLAGS="$CFLAGS -Ae -D_HPUX_SOURCE"
+ fi
+ ;;
+ *-dec-osf4*)
+ if test -z "$GCC" ; then
+ # Suppress all warnings
+ # to get rid of the unsigned/signed char mismatch warnings.
+ CFLAGS="$CFLAGS -w"
+ fi
+ ;;
+ m68k-atari-mint)
+ ;;
+ *-apple-darwin*)
+
+printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
+
+printf "%s\n" "#define USE_POSIX_SPAWN_FOR_TESTS 1" >>confdefs.h
+
+ ac_fn_c_check_header_compile "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default"
+if test "x$ac_cv_header_spawn_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SPAWN_H 1" >>confdefs.h
+
+fi
+
+ ;;
+ *)
+ ;;
+esac
+
+if test "$have_w32_system" = yes; then
+
+printf "%s\n" "#define HAVE_W32_SYSTEM 1" >>confdefs.h
+
+ if test "$have_w32ce_system" = yes; then
+
+printf "%s\n" "#define HAVE_W32CE_SYSTEM 1" >>confdefs.h
+
+ fi
+fi
+ if test "$have_w32_system" = yes; then
+ HAVE_W32_SYSTEM_TRUE=
+ HAVE_W32_SYSTEM_FALSE='#'
+else
+ HAVE_W32_SYSTEM_TRUE='#'
+ HAVE_W32_SYSTEM_FALSE=
+fi
+
+ if test "$have_w32ce_system" = yes; then
+ HAVE_W32CE_SYSTEM_TRUE=
+ HAVE_W32CE_SYSTEM_FALSE='#'
+else
+ HAVE_W32CE_SYSTEM_TRUE='#'
+ HAVE_W32CE_SYSTEM_FALSE=
+fi
+
+
+
+
+# A printable OS Name is sometimes useful.
+case "${host}" in
+ *-*-mingw32ce*)
+ PRINTABLE_OS_NAME="W32CE"
+ ;;
+
+ *-*-mingw32*)
+ PRINTABLE_OS_NAME="W32"
+ ;;
+
+ i?86-emx-os2 | i?86-*-os2*emx )
+ PRINTABLE_OS_NAME="OS/2"
+ ;;
+
+ i?86-*-msdosdjgpp*)
+ PRINTABLE_OS_NAME="MSDOS/DJGPP"
+ ;;
+
+ *-linux*)
+ PRINTABLE_OS_NAME="GNU/Linux"
+ ;;
+
+ *)
+ PRINTABLE_OS_NAME=`uname -s || echo "Unknown"`
+ ;;
+esac
+
+NAME_OF_DEV_RANDOM="/dev/random"
+NAME_OF_DEV_URANDOM="/dev/urandom"
+
+# Check whether --enable-endian-check was given.
+if test ${enable_endian_check+y}
+then :
+ enableval=$enable_endian_check; endiancheck=$enableval
+else $as_nop
+ endiancheck=yes
+fi
+
+if test x"$endiancheck" = xyes ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+printf %s "checking whether byte ordering is bigendian... " >&6; }
+if test ${ac_cv_c_bigendian+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_bigendian=unknown
+ # See if we're dealing with a universal compiler.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ # Check for potential -arch flags. It is not universal unless
+ # there are at least two -arch flags with different values.
+ ac_arch=
+ ac_prev=
+ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+ if test -n "$ac_prev"; then
+ case $ac_word in
+ i?86 | x86_64 | ppc | ppc64)
+ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+ ac_arch=$ac_word
+ else
+ ac_cv_c_bigendian=universal
+ break
+ fi
+ ;;
+ esac
+ ac_prev=
+ elif test "x$ac_word" = "x-arch"; then
+ ac_prev=arch
+ fi
+ done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+
+int
+main (void)
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+ && LITTLE_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+
+int
+main (void)
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_bigendian=yes
+else $as_nop
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+
+int
+main (void)
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ # It does; now see whether it defined to _BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+
+int
+main (void)
+{
+#ifndef _BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_bigendian=yes
+else $as_nop
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # Compile a test program.
+ if test "$cross_compiling" = yes
+then :
+ # Try to guess by grepping values from an object file.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+unsigned short int ascii_mm[] =
+ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ unsigned short int ascii_ii[] =
+ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ int use_ascii (int i) {
+ return ascii_mm[i] + ascii_ii[i];
+ }
+ unsigned short int ebcdic_ii[] =
+ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ unsigned short int ebcdic_mm[] =
+ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ int use_ebcdic (int i) {
+ return ebcdic_mm[i] + ebcdic_ii[i];
+ }
+ extern int foo;
+
+int
+main (void)
+{
+return use_ascii (foo) == use_ebcdic (foo);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_c_bigendian=no
+else $as_nop
+ ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+printf "%s\n" "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+ yes)
+ printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+ no)
+ ;; #(
+ universal)
+
+printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+ ;; #(
+ *)
+ as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+else
+
+printf "%s\n" "#define DISABLED_ENDIAN_CHECK 1" >>confdefs.h
+
+fi
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5
+printf %s "checking size of unsigned short... " >&6; }
+if test ${ac_cv_sizeof_unsigned_short+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_unsigned_short" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned short)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_short=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5
+printf "%s\n" "$ac_cv_sizeof_unsigned_short" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short" >>confdefs.h
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
+printf %s "checking size of unsigned int... " >&6; }
+if test ${ac_cv_sizeof_unsigned_int+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_unsigned_int" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned int)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_int=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
+printf "%s\n" "$ac_cv_sizeof_unsigned_int" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int" >>confdefs.h
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
+printf %s "checking size of unsigned long... " >&6; }
+if test ${ac_cv_sizeof_unsigned_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_unsigned_long" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_long=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
+printf "%s\n" "$ac_cv_sizeof_unsigned_long" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long" >>confdefs.h
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
+printf %s "checking size of unsigned long long... " >&6; }
+if test ${ac_cv_sizeof_unsigned_long_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_unsigned_long_long" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_unsigned_long_long=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
+printf "%s\n" "$ac_cv_sizeof_unsigned_long_long" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long" >>confdefs.h
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+printf %s "checking size of void *... " >&6; }
+if test ${ac_cv_sizeof_void_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_void_p" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_void_p=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintptr_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h
+
+else $as_nop
+ for ac_type in 'unsigned int' 'unsigned long int' \
+ 'unsigned long long int'; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h
+
+ ac_type=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test -z "$ac_type" && break
+ done
+fi
+
+
+
+if test "$ac_cv_sizeof_unsigned_short" = "0" \
+ || test "$ac_cv_sizeof_unsigned_int" = "0" \
+ || test "$ac_cv_sizeof_unsigned_long" = "0"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Hmmm, something is wrong with the sizes - using defaults" >&5
+printf "%s\n" "$as_me: WARNING: Hmmm, something is wrong with the sizes - using defaults" >&2;};
+fi
+
+# Ensure that we have UINT64_C before we bother to check for uint64_t
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for UINT64_C" >&5
+printf %s "checking for UINT64_C... " >&6; }
+if test ${gnupg_cv_uint64_c_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <inttypes.h>
+int
+main (void)
+{
+uint64_t foo=UINT64_C(42);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gnupg_cv_uint64_c_works=yes
+else $as_nop
+ gnupg_cv_uint64_c_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_uint64_c_works" >&5
+printf "%s\n" "$gnupg_cv_uint64_c_works" >&6; }
+if test "$gnupg_cv_uint64_c_works" = "yes" ; then
+ # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of uint64_t" >&5
+printf %s "checking size of uint64_t... " >&6; }
+if test ${ac_cv_sizeof_uint64_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint64_t))" "ac_cv_sizeof_uint64_t" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_uint64_t" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (uint64_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_uint64_t=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint64_t" >&5
+printf "%s\n" "$ac_cv_sizeof_uint64_t" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_UINT64_T $ac_cv_sizeof_uint64_t" >>confdefs.h
+
+
+fi
+
+# Do we have any 64-bit data types?
+if test "$ac_cv_sizeof_unsigned_int" != "8" \
+ && test "$ac_cv_sizeof_unsigned_long" != "8" \
+ && test "$ac_cv_sizeof_unsigned_long_long" != "8" \
+ && test "$ac_cv_sizeof_uint64_t" != "8"; then
+ as_fn_error $? "
+***
+*** No 64-bit integer type available.
+*** It is not possible to build Libgcrypt on this platform.
+***" "$LINENO" 5
+fi
+
+
+# If not specified otherwise, all available algorithms will be
+# included.
+default_ciphers="$available_ciphers"
+default_pubkey_ciphers="$available_pubkey_ciphers"
+default_digests="$available_digests"
+default_kdfs="$available_kdfs"
+# Blacklist MD2 by default
+default_digests=`echo $default_digests | sed -e 's/md2//g'`
+
+# Substitutions to set generated files in a Emacs buffer to read-only.
+emacs_local_vars_begin='Local Variables:'
+
+emacs_local_vars_read_only='buffer-read-only: t'
+
+emacs_local_vars_end='End:'
+
+
+############################
+## Command line switches. ##
+############################
+
+# Implementation of the --enable-ciphers switch.
+# Check whether --enable-ciphers was given.
+if test ${enable_ciphers+y}
+then :
+ enableval=$enable_ciphers; enabled_ciphers=`echo $enableval | tr ',:' ' ' | tr 'A-Z' 'a-z'`
+else $as_nop
+ enabled_ciphers=""
+fi
+
+if test "x$enabled_ciphers" = "x" \
+ -o "$enabled_ciphers" = "yes" \
+ -o "$enabled_ciphers" = "no"; then
+ enabled_ciphers=$default_ciphers
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which symmetric ciphers to include" >&5
+printf %s "checking which symmetric ciphers to include... " >&6; }
+for cipher in $enabled_ciphers; do
+
+name=$cipher
+list=$available_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "0"; then
+ as_fn_error $? "unsupported cipher \"$cipher\" specified" "$LINENO" 5
+ fi
+done
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enabled_ciphers" >&5
+printf "%s\n" "$enabled_ciphers" >&6; }
+
+# Implementation of the --enable-pubkey-ciphers switch.
+# Check whether --enable-pubkey-ciphers was given.
+if test ${enable_pubkey_ciphers+y}
+then :
+ enableval=$enable_pubkey_ciphers; enabled_pubkey_ciphers=`echo $enableval | tr ',:' ' ' | tr 'A-Z' 'a-z'`
+else $as_nop
+ enabled_pubkey_ciphers=""
+fi
+
+if test "x$enabled_pubkey_ciphers" = "x" \
+ -o "$enabled_pubkey_ciphers" = "yes" \
+ -o "$enabled_pubkey_ciphers" = "no"; then
+ enabled_pubkey_ciphers=$default_pubkey_ciphers
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which public-key ciphers to include" >&5
+printf %s "checking which public-key ciphers to include... " >&6; }
+for cipher in $enabled_pubkey_ciphers; do
+
+name=$cipher
+list=$available_pubkey_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "0"; then
+ as_fn_error $? "unsupported public-key cipher specified" "$LINENO" 5
+ fi
+done
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enabled_pubkey_ciphers" >&5
+printf "%s\n" "$enabled_pubkey_ciphers" >&6; }
+
+# Implementation of the --enable-digests switch.
+# Check whether --enable-digests was given.
+if test ${enable_digests+y}
+then :
+ enableval=$enable_digests; enabled_digests=`echo $enableval | tr ',:' ' ' | tr 'A-Z' 'a-z'`
+else $as_nop
+ enabled_digests=""
+fi
+
+if test "x$enabled_digests" = "x" \
+ -o "$enabled_digests" = "yes" \
+ -o "$enabled_digests" = "no"; then
+ enabled_digests=$default_digests
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which message digests to include" >&5
+printf %s "checking which message digests to include... " >&6; }
+for digest in $enabled_digests; do
+
+name=$digest
+list=$available_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "0"; then
+ as_fn_error $? "unsupported message digest specified" "$LINENO" 5
+ fi
+done
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enabled_digests" >&5
+printf "%s\n" "$enabled_digests" >&6; }
+
+# Implementation of the --enable-kdfs switch.
+# Check whether --enable-kdfs was given.
+if test ${enable_kdfs+y}
+then :
+ enableval=$enable_kdfs; enabled_kdfs=`echo $enableval | tr ',:' ' ' | tr 'A-Z' 'a-z'`
+else $as_nop
+ enabled_kdfs=""
+fi
+
+if test "x$enabled_kdfs" = "x" \
+ -o "$enabled_kdfs" = "yes" \
+ -o "$enabled_kdfs" = "no"; then
+ enabled_kdfs=$default_kdfs
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which key derivation functions to include" >&5
+printf %s "checking which key derivation functions to include... " >&6; }
+for kdf in $enabled_kdfs; do
+
+name=$kdf
+list=$available_kdfs
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "0"; then
+ as_fn_error $? "unsupported key derivation function specified" "$LINENO" 5
+ fi
+done
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enabled_kdfs" >&5
+printf "%s\n" "$enabled_kdfs" >&6; }
+
+# Implementation of the --enable-random switch.
+# Check whether --enable-random was given.
+if test ${enable_random+y}
+then :
+ enableval=$enable_random; random=`echo $enableval | tr 'A-Z' 'a-z'`
+fi
+
+if test "x$random" = "x" -o "$random" = "yes" -o "$random" = "no"; then
+ random=default
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which random module to use" >&5
+printf %s "checking which random module to use... " >&6; }
+if test "$random" != "default" -a "$random" != "auto"; then
+
+name=$random
+list=$available_random_modules
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "0"; then
+ as_fn_error $? "unsupported random module specified" "$LINENO" 5
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $random" >&5
+printf "%s\n" "$random" >&6; }
+
+# Implementation of the --disable-dev-random switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether use of /dev/random is requested" >&5
+printf %s "checking whether use of /dev/random is requested... " >&6; }
+# Check whether --enable-dev-random was given.
+if test ${enable_dev_random+y}
+then :
+ enableval=$enable_dev_random; try_dev_random=$enableval
+else $as_nop
+ try_dev_random=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $try_dev_random" >&5
+printf "%s\n" "$try_dev_random" >&6; }
+
+# Implementation of the --with-egd-socket switch.
+
+# Check whether --with-egd-socket was given.
+if test ${with_egd_socket+y}
+then :
+ withval=$with_egd_socket; egd_socket_name="$withval"
+else $as_nop
+ egd_socket_name=""
+fi
+
+
+printf "%s\n" "#define EGD_SOCKET_NAME \"$egd_socket_name\"" >>confdefs.h
+
+
+# Implementation of the --enable-random-daemon
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the experimental random daemon is requested" >&5
+printf %s "checking whether the experimental random daemon is requested... " >&6; }
+# Check whether --enable-random-daemon was given.
+if test ${enable_random_daemon+y}
+then :
+ enableval=$enable_random_daemon; enable_random_daemon=$enableval
+else $as_nop
+ enable_random_daemon=no
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_random_daemon" >&5
+printf "%s\n" "$enable_random_daemon" >&6; }
+ if test x$enable_random_daemon = xyes; then
+ ENABLE_RANDOM_DAEMON_TRUE=
+ ENABLE_RANDOM_DAEMON_FALSE='#'
+else
+ ENABLE_RANDOM_DAEMON_TRUE='#'
+ ENABLE_RANDOM_DAEMON_FALSE=
+fi
+
+
+
+# Implementation of --disable-asm.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether MPI and cipher assembler modules are requested" >&5
+printf %s "checking whether MPI and cipher assembler modules are requested... " >&6; }
+# Check whether --enable-asm was given.
+if test ${enable_asm+y}
+then :
+ enableval=$enable_asm; try_asm_modules=$enableval
+else $as_nop
+ try_asm_modules=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $try_asm_modules" >&5
+printf "%s\n" "$try_asm_modules" >&6; }
+if test "$try_asm_modules" != yes ; then
+
+printf "%s\n" "#define ASM_DISABLED 1" >>confdefs.h
+
+fi
+
+# Implementation of the --enable-m-guard switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memory guard is requested" >&5
+printf %s "checking whether memory guard is requested... " >&6; }
+# Check whether --enable-m-guard was given.
+if test ${enable_m_guard+y}
+then :
+ enableval=$enable_m_guard; use_m_guard=$enableval
+else $as_nop
+ use_m_guard=no
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $use_m_guard" >&5
+printf "%s\n" "$use_m_guard" >&6; }
+if test "$use_m_guard" = yes ; then
+
+printf "%s\n" "#define M_GUARD 1" >>confdefs.h
+
+fi
+
+# Implementation of the --enable-large-data-tests switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to run large data tests" >&5
+printf %s "checking whether to run large data tests... " >&6; }
+# Check whether --enable-large-data-tests was given.
+if test ${enable_large_data_tests+y}
+then :
+ enableval=$enable_large_data_tests; large_data_tests=$enableval
+else $as_nop
+ large_data_tests=no
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $large_data_tests" >&5
+printf "%s\n" "$large_data_tests" >&6; }
+RUN_LARGE_DATA_TESTS=$large_data_tests
+
+
+# Implementation of --enable-force-soft-hwfeatures
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether 'soft' HW feature bits are forced on" >&5
+printf %s "checking whether 'soft' HW feature bits are forced on... " >&6; }
+# Check whether --enable-force-soft-hwfeatures was given.
+if test ${enable_force_soft_hwfeatures+y}
+then :
+ enableval=$enable_force_soft_hwfeatures; force_soft_hwfeatures=$enableval
+else $as_nop
+ force_soft_hwfeatures=no
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $force_soft_hwfeatures" >&5
+printf "%s\n" "$force_soft_hwfeatures" >&6; }
+
+
+# Implementation of the --with-capabilities switch.
+# Check whether we want to use Linux capabilities
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether use of capabilities is requested" >&5
+printf %s "checking whether use of capabilities is requested... " >&6; }
+
+# Check whether --with-capabilities was given.
+if test ${with_capabilities+y}
+then :
+ withval=$with_capabilities; use_capabilities="$withval"
+else $as_nop
+ use_capabilities=no
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $use_capabilities" >&5
+printf "%s\n" "$use_capabilities" >&6; }
+
+# Implementation of the --enable-hmac-binary-check.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a HMAC binary check is requested" >&5
+printf %s "checking whether a HMAC binary check is requested... " >&6; }
+# Check whether --enable-hmac-binary-check was given.
+if test ${enable_hmac_binary_check+y}
+then :
+ enableval=$enable_hmac_binary_check; use_hmac_binary_check="$enableval"
+else $as_nop
+ use_hmac_binary_check=no
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $use_hmac_binary_check" >&5
+printf "%s\n" "$use_hmac_binary_check" >&6; }
+if test "$use_hmac_binary_check" = no ; then
+ DEF_HMAC_BINARY_CHECK=''
+else
+
+printf "%s\n" "#define ENABLE_HMAC_BINARY_CHECK 1" >>confdefs.h
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objcopy; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJCOPY+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OBJCOPY"; then
+ ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJCOPY=$ac_cv_prog_OBJCOPY
+if test -n "$OBJCOPY"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5
+printf "%s\n" "$OBJCOPY" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJCOPY"; then
+ ac_ct_OBJCOPY=$OBJCOPY
+ # Extract the first word of "objcopy", so it can be a program name with args.
+set dummy objcopy; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJCOPY+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OBJCOPY"; then
+ ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJCOPY="objcopy"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY
+if test -n "$ac_ct_OBJCOPY"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5
+printf "%s\n" "$ac_ct_OBJCOPY" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJCOPY" = x; then
+ OBJCOPY=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJCOPY=$ac_ct_OBJCOPY
+ fi
+else
+ OBJCOPY="$ac_cv_prog_OBJCOPY"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}readelf", so it can be a program name with args.
+set dummy ${ac_tool_prefix}readelf; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_READELF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$READELF"; then
+ ac_cv_prog_READELF="$READELF" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_READELF="${ac_tool_prefix}readelf"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+READELF=$ac_cv_prog_READELF
+if test -n "$READELF"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5
+printf "%s\n" "$READELF" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_READELF"; then
+ ac_ct_READELF=$READELF
+ # Extract the first word of "readelf", so it can be a program name with args.
+set dummy readelf; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_READELF+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_READELF"; then
+ ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_READELF="readelf"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_READELF=$ac_cv_prog_ac_ct_READELF
+if test -n "$ac_ct_READELF"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_READELF" >&5
+printf "%s\n" "$ac_ct_READELF" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_READELF" = x; then
+ READELF=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ READELF=$ac_ct_READELF
+ fi
+else
+ READELF="$ac_cv_prog_READELF"
+fi
+
+ if test "$use_hmac_binary_check" != yes ; then
+ DEF_HMAC_BINARY_CHECK=-DKEY_FOR_BINARY_CHECK="'\"$use_hmac_binary_check\"'"
+ fi
+fi
+ if test "x$use_hmac_binary_check" != xno; then
+ USE_HMAC_BINARY_CHECK_TRUE=
+ USE_HMAC_BINARY_CHECK_FALSE='#'
+else
+ USE_HMAC_BINARY_CHECK_TRUE='#'
+ USE_HMAC_BINARY_CHECK_FALSE=
+fi
+
+
+
+# Implementation of the --with-fips-module-version.
+
+# Check whether --with-fips-module-version was given.
+if test ${with_fips_module_version+y}
+then :
+ withval=$with_fips_module_version; fips_module_version="$withval"
+else $as_nop
+ fips_module_version=""
+fi
+
+
+printf "%s\n" "#define FIPS_MODULE_VERSION \"$fips_module_version\"" >>confdefs.h
+
+
+# Implementation of the --disable-jent-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether jitter entropy support is requested" >&5
+printf %s "checking whether jitter entropy support is requested... " >&6; }
+# Check whether --enable-jent-support was given.
+if test ${enable_jent_support+y}
+then :
+ enableval=$enable_jent_support; jentsupport=$enableval
+else $as_nop
+ jentsupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $jentsupport" >&5
+printf "%s\n" "$jentsupport" >&6; }
+
+# Implementation of the --disable-padlock-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether padlock support is requested" >&5
+printf %s "checking whether padlock support is requested... " >&6; }
+# Check whether --enable-padlock-support was given.
+if test ${enable_padlock_support+y}
+then :
+ enableval=$enable_padlock_support; padlocksupport=$enableval
+else $as_nop
+ padlocksupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $padlocksupport" >&5
+printf "%s\n" "$padlocksupport" >&6; }
+
+# Implementation of the --disable-aesni-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether AESNI support is requested" >&5
+printf %s "checking whether AESNI support is requested... " >&6; }
+# Check whether --enable-aesni-support was given.
+if test ${enable_aesni_support+y}
+then :
+ enableval=$enable_aesni_support; aesnisupport=$enableval
+else $as_nop
+ aesnisupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $aesnisupport" >&5
+printf "%s\n" "$aesnisupport" >&6; }
+
+# Implementation of the --disable-shaext-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether SHAEXT support is requested" >&5
+printf %s "checking whether SHAEXT support is requested... " >&6; }
+# Check whether --enable-shaext-support was given.
+if test ${enable_shaext_support+y}
+then :
+ enableval=$enable_shaext_support; shaextsupport=$enableval
+else $as_nop
+ shaextsupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $shaextsupport" >&5
+printf "%s\n" "$shaextsupport" >&6; }
+
+# Implementation of the --disable-pclmul-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether PCLMUL support is requested" >&5
+printf %s "checking whether PCLMUL support is requested... " >&6; }
+# Check whether --enable-pclmul-support was given.
+if test ${enable_pclmul_support+y}
+then :
+ enableval=$enable_pclmul_support; pclmulsupport=$enableval
+else $as_nop
+ pclmulsupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pclmulsupport" >&5
+printf "%s\n" "$pclmulsupport" >&6; }
+
+# Implementation of the --disable-sse41-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether SSE4.1 support is requested" >&5
+printf %s "checking whether SSE4.1 support is requested... " >&6; }
+# Check whether --enable-sse41-support was given.
+if test ${enable_sse41_support+y}
+then :
+ enableval=$enable_sse41_support; sse41support=$enableval
+else $as_nop
+ sse41support=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $sse41support" >&5
+printf "%s\n" "$sse41support" >&6; }
+
+# Implementation of the --disable-drng-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether DRNG support is requested" >&5
+printf %s "checking whether DRNG support is requested... " >&6; }
+# Check whether --enable-drng-support was given.
+if test ${enable_drng_support+y}
+then :
+ enableval=$enable_drng_support; drngsupport=$enableval
+else $as_nop
+ drngsupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $drngsupport" >&5
+printf "%s\n" "$drngsupport" >&6; }
+
+# Implementation of the --disable-avx-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether AVX support is requested" >&5
+printf %s "checking whether AVX support is requested... " >&6; }
+# Check whether --enable-avx-support was given.
+if test ${enable_avx_support+y}
+then :
+ enableval=$enable_avx_support; avxsupport=$enableval
+else $as_nop
+ avxsupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $avxsupport" >&5
+printf "%s\n" "$avxsupport" >&6; }
+
+# Implementation of the --disable-avx2-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether AVX2 support is requested" >&5
+printf %s "checking whether AVX2 support is requested... " >&6; }
+# Check whether --enable-avx2-support was given.
+if test ${enable_avx2_support+y}
+then :
+ enableval=$enable_avx2_support; avx2support=$enableval
+else $as_nop
+ avx2support=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $avx2support" >&5
+printf "%s\n" "$avx2support" >&6; }
+
+# Implementation of the --disable-neon-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NEON support is requested" >&5
+printf %s "checking whether NEON support is requested... " >&6; }
+# Check whether --enable-neon-support was given.
+if test ${enable_neon_support+y}
+then :
+ enableval=$enable_neon_support; neonsupport=$enableval
+else $as_nop
+ neonsupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $neonsupport" >&5
+printf "%s\n" "$neonsupport" >&6; }
+
+# Implementation of the --disable-arm-crypto-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ARMv8 Crypto Extension support is requested" >&5
+printf %s "checking whether ARMv8 Crypto Extension support is requested... " >&6; }
+# Check whether --enable-arm-crypto-support was given.
+if test ${enable_arm_crypto_support+y}
+then :
+ enableval=$enable_arm_crypto_support; armcryptosupport=$enableval
+else $as_nop
+ armcryptosupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $armcryptosupport" >&5
+printf "%s\n" "$armcryptosupport" >&6; }
+
+# Implementation of the --disable-ppc-crypto-support switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether PPC crypto support is requested" >&5
+printf %s "checking whether PPC crypto support is requested... " >&6; }
+# Check whether --enable-ppc-crypto-support was given.
+if test ${enable_ppc_crypto_support+y}
+then :
+ enableval=$enable_ppc_crypto_support; ppccryptosupport=$enableval
+else $as_nop
+ ppccryptosupport=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ppccryptosupport" >&5
+printf "%s\n" "$ppccryptosupport" >&6; }
+
+# Implementation of the --disable-O-flag-munging switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a -O flag munging is requested" >&5
+printf %s "checking whether a -O flag munging is requested... " >&6; }
+# Check whether --enable-O-flag-munging was given.
+if test ${enable_O_flag_munging+y}
+then :
+ enableval=$enable_O_flag_munging; enable_o_flag_munging=$enableval
+else $as_nop
+ enable_o_flag_munging=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_o_flag_munging" >&5
+printf "%s\n" "$enable_o_flag_munging" >&6; }
+ if test "$enable_o_flag_munging" = "yes"; then
+ ENABLE_O_FLAG_MUNGING_TRUE=
+ ENABLE_O_FLAG_MUNGING_FALSE='#'
+else
+ ENABLE_O_FLAG_MUNGING_TRUE='#'
+ ENABLE_O_FLAG_MUNGING_FALSE=
+fi
+
+
+# Implementation of the --disable-instrumentation-munging switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a instrumentation (-fprofile, -fsanitize) munging is requested" >&5
+printf %s "checking whether a instrumentation (-fprofile, -fsanitize) munging is requested... " >&6; }
+# Check whether --enable-instrumentation-munging was given.
+if test ${enable_instrumentation_munging+y}
+then :
+ enableval=$enable_instrumentation_munging; enable_instrumentation_munging=$enableval
+else $as_nop
+ enable_instrumentation_munging=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_instrumentation_munging" >&5
+printf "%s\n" "$enable_instrumentation_munging" >&6; }
+ if test "$enable_instrumentation_munging" = "yes"; then
+ ENABLE_INSTRUMENTATION_MUNGING_TRUE=
+ ENABLE_INSTRUMENTATION_MUNGING_FALSE='#'
+else
+ ENABLE_INSTRUMENTATION_MUNGING_TRUE='#'
+ ENABLE_INSTRUMENTATION_MUNGING_FALSE=
+fi
+
+
+# Implementation of the --disable-amd64-as-feature-detection switch.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable AMD64 as(1) feature detection" >&5
+printf %s "checking whether to enable AMD64 as(1) feature detection... " >&6; }
+# Check whether --enable-amd64-as-feature-detection was given.
+if test ${enable_amd64_as_feature_detection+y}
+then :
+ enableval=$enable_amd64_as_feature_detection; amd64_as_feature_detection=$enableval
+else $as_nop
+ amd64_as_feature_detection=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $amd64_as_feature_detection" >&5
+printf "%s\n" "$amd64_as_feature_detection" >&6; }
+
+
+
+printf "%s\n" "#define PRINTABLE_OS_NAME \"$PRINTABLE_OS_NAME\"" >>confdefs.h
+
+
+# For some systems we know that we have ld_version scripts.
+# Use it then as default.
+have_ld_version_script=no
+case "${host}" in
+ *-*-linux*)
+ have_ld_version_script=yes
+ ;;
+ *-*-gnu*)
+ have_ld_version_script=yes
+ ;;
+esac
+# Check whether --enable-ld-version-script was given.
+if test ${enable_ld_version_script+y}
+then :
+ enableval=$enable_ld_version_script; have_ld_version_script=$enableval
+else $as_nop
+ :
+fi
+
+ if test "$have_ld_version_script" = "yes"; then
+ HAVE_LD_VERSION_SCRIPT_TRUE=
+ HAVE_LD_VERSION_SCRIPT_FALSE='#'
+else
+ HAVE_LD_VERSION_SCRIPT_TRUE='#'
+ HAVE_LD_VERSION_SCRIPT_FALSE=
+fi
+
+
+
+printf "%s\n" "#define NAME_OF_DEV_RANDOM \"$NAME_OF_DEV_RANDOM\"" >>confdefs.h
+
+
+printf "%s\n" "#define NAME_OF_DEV_URANDOM \"$NAME_OF_DEV_URANDOM\"" >>confdefs.h
+
+
+#
+# Specify how we support our local modification of libtool for Windows
+# 64-bit. Options are:
+#
+# (1) apply: when appying patch fails, it results failure of entire build
+# (2) never: never apply the patch (no try)
+# (3) try: use patched if it goes well, use original if fails
+#
+
+# Check whether --with-libtool-modification was given.
+if test ${with_libtool_modification+y}
+then :
+ withval=$with_libtool_modification; build_libtool_modification=$withval
+else $as_nop
+ build_libtool_modification=never
+fi
+
+
+#
+# Apply a patch (locally maintained one of ours) to libtool
+#
+case $host in
+ x86_64-*mingw32*)
+ac_config_commands="$ac_config_commands libtool-patch"
+
+ ;;
+ *)
+ ;;
+esac
+
+###############################
+#### Checks for libraries. ####
+###############################
+
+#
+# gpg-error is required.
+#
+ gpg_error_config_prefix=""
+
+# Check whether --with-libgpg-error-prefix was given.
+if test ${with_libgpg_error_prefix+y}
+then :
+ withval=$with_libgpg_error_prefix; gpg_error_config_prefix="$withval"
+fi
+
+
+
+# Check whether --with-gpg-error-prefix was given.
+if test ${with_gpg_error_prefix+y}
+then :
+ withval=$with_gpg_error_prefix; gpg_error_config_prefix="$withval"
+fi
+
+
+ if test x"${GPG_ERROR_CONFIG}" = x ; then
+ if test x"${gpg_error_config_prefix}" != x ; then
+ GPG_ERROR_CONFIG="${gpg_error_config_prefix}/bin/gpg-error-config"
+ else
+ case "${SYSROOT}" in
+ /*)
+ if test -x "${SYSROOT}/bin/gpg-error-config" ; then
+ GPG_ERROR_CONFIG="${SYSROOT}/bin/gpg-error-config"
+ fi
+ ;;
+ '')
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&5
+printf "%s\n" "$as_me: WARNING: Ignoring \$SYSROOT as it is not an absolute path." >&2;}
+ ;;
+ esac
+ fi
+ fi
+
+ # Extract the first word of "gpg-error-config", so it can be a program name with args.
+set dummy gpg-error-config; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GPG_ERROR_CONFIG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $GPG_ERROR_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GPG_ERROR_CONFIG="$GPG_ERROR_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GPG_ERROR_CONFIG="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GPG_ERROR_CONFIG" && ac_cv_path_GPG_ERROR_CONFIG="no"
+ ;;
+esac
+fi
+GPG_ERROR_CONFIG=$ac_cv_path_GPG_ERROR_CONFIG
+if test -n "$GPG_ERROR_CONFIG"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPG_ERROR_CONFIG" >&5
+printf "%s\n" "$GPG_ERROR_CONFIG" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+
+ # Extract the first word of "gpgrt-config", so it can be a program name with args.
+set dummy gpgrt-config; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GPGRT_CONFIG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $GPGRT_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GPGRT_CONFIG="$GPGRT_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$prefix/bin:$PATH"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GPGRT_CONFIG="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GPGRT_CONFIG" && ac_cv_path_GPGRT_CONFIG="no"
+ ;;
+esac
+fi
+GPGRT_CONFIG=$ac_cv_path_GPGRT_CONFIG
+if test -n "$GPGRT_CONFIG"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GPGRT_CONFIG" >&5
+printf "%s\n" "$GPGRT_CONFIG" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ if test "$GPGRT_CONFIG" != "no"; then
+ # Determine gpgrt_libdir
+ #
+ # Get the prefix of gpgrt-config assuming it's something like:
+ # <PREFIX>/bin/gpgrt-config
+ gpgrt_prefix=${GPGRT_CONFIG%/*/*}
+ possible_libdir1=${gpgrt_prefix}/lib
+ # Determine by using system libdir-format with CC, it's like:
+ # Normal style: /usr/lib
+ # GNU cross style: /usr/<triplet>/lib
+ # Debian style: /usr/lib/<multiarch-name>
+ # Fedora/openSUSE style: /usr/lib, /usr/lib32 or /usr/lib64
+ # It is assumed that CC is specified to the one of host on cross build.
+ if libdir_candidates=$(${CC:-cc} -print-search-dirs | \
+ sed -n -e "/^libraries/{s/libraries: =//;s/:/\\
+/g;p;}"); then
+ # From the output of -print-search-dirs, select valid pkgconfig dirs.
+ libdir_candidates=$(for dir in $libdir_candidates; do
+ if p=$(cd $dir 2>/dev/null && pwd); then
+ test -d "$p/pkgconfig" && echo $p;
+ fi
+ done)
+
+ for possible_libdir0 in $libdir_candidates; do
+ # possible_libdir0:
+ # Fallback candidate, the one of system-installed (by $CC)
+ # (/usr/<triplet>/lib, /usr/lib/<multiarch-name> or /usr/lib32)
+ # possible_libdir1:
+ # Another candidate, user-locally-installed
+ # (<gpgrt_prefix>/lib)
+ # possible_libdir2
+ # Most preferred
+ # (<gpgrt_prefix>/<triplet>/lib,
+ # <gpgrt_prefix>/lib/<multiarch-name> or <gpgrt_prefix>/lib32)
+ if test "${possible_libdir0##*/}" = "lib"; then
+ possible_prefix0=${possible_libdir0%/lib}
+ possible_prefix0_triplet=${possible_prefix0##*/}
+ if test -z "$possible_prefix0_triplet"; then
+ continue
+ fi
+ possible_libdir2=${gpgrt_prefix}/$possible_prefix0_triplet/lib
+ else
+ possible_prefix0=${possible_libdir0%%/lib*}
+ possible_libdir2=${gpgrt_prefix}${possible_libdir0#$possible_prefix0}
+ fi
+ if test -f ${possible_libdir2}/pkgconfig/gpg-error.pc; then
+ gpgrt_libdir=${possible_libdir2}
+ elif test -f ${possible_libdir1}/pkgconfig/gpg-error.pc; then
+ gpgrt_libdir=${possible_libdir1}
+ elif test -f ${possible_libdir0}/pkgconfig/gpg-error.pc; then
+ gpgrt_libdir=${possible_libdir0}
+ fi
+ if test -n "$gpgrt_libdir"; then break; fi
+ done
+ fi
+ if test -z "$gpgrt_libdir"; then
+ # No valid pkgconfig dir in any of the system directories, fallback
+ gpgrt_libdir=${possible_libdir1}
+ fi
+ else
+ unset GPGRT_CONFIG
+ fi
+
+ if test -n "$gpgrt_libdir"; then
+ GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
+ if $GPGRT_CONFIG gpg-error >/dev/null 2>&1; then
+ GPG_ERROR_CONFIG="$GPGRT_CONFIG gpg-error"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Use gpgrt-config with $gpgrt_libdir as gpg-error-config" >&5
+printf "%s\n" "$as_me: Use gpgrt-config with $gpgrt_libdir as gpg-error-config" >&6;}
+ gpg_error_config_version=`$GPG_ERROR_CONFIG --modversion`
+ else
+ gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
+ unset GPGRT_CONFIG
+ fi
+ elif test "$GPG_ERROR_CONFIG" != "no"; then
+ gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
+ unset GPGRT_CONFIG
+ fi
+
+ min_gpg_error_version="$NEED_GPG_ERROR_VERSION"
+ ok=no
+ if test "$GPG_ERROR_CONFIG" != "no"; then
+ req_major=`echo $min_gpg_error_version | \
+ sed 's/\([0-9]*\)\.\([0-9]*\)/\1/'`
+ req_minor=`echo $min_gpg_error_version | \
+ sed 's/\([0-9]*\)\.\([0-9]*\)/\2/'`
+ major=`echo $gpg_error_config_version | \
+ sed 's/\([0-9]*\)\.\([0-9]*\).*/\1/'`
+ minor=`echo $gpg_error_config_version | \
+ sed 's/\([0-9]*\)\.\([0-9]*\).*/\2/'`
+ if test "$major" -gt "$req_major"; then
+ ok=yes
+ else
+ if test "$major" -eq "$req_major"; then
+ if test "$minor" -ge "$req_minor"; then
+ ok=yes
+ fi
+ fi
+ fi
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GPG Error - version >= $min_gpg_error_version" >&5
+printf %s "checking for GPG Error - version >= $min_gpg_error_version... " >&6; }
+ if test $ok = yes; then
+ GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG --cflags`
+ GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG --libs`
+ if test -z "$GPGRT_CONFIG"; then
+ GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --mt --cflags 2>/dev/null`
+ GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --mt --libs 2>/dev/null`
+ else
+ GPG_ERROR_MT_CFLAGS=`$GPG_ERROR_CONFIG --variable=mtcflags 2>/dev/null`
+ GPG_ERROR_MT_CFLAGS="$GPG_ERROR_CFLAGS${GPG_ERROR_CFLAGS:+ }$GPG_ERROR_MT_CFLAGS"
+ GPG_ERROR_MT_LIBS=`$GPG_ERROR_CONFIG --variable=mtlibs 2>/dev/null`
+ GPG_ERROR_MT_LIBS="$GPG_ERROR_LIBS${GPG_ERROR_LIBS:+ }$GPG_ERROR_MT_LIBS"
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes ($gpg_error_config_version)" >&5
+printf "%s\n" "yes ($gpg_error_config_version)" >&6; }
+ :
+ if test -z "$GPGRT_CONFIG"; then
+ gpg_error_config_host=`$GPG_ERROR_CONFIG --host 2>/dev/null || echo none`
+ else
+ gpg_error_config_host=`$GPG_ERROR_CONFIG --variable=host 2>/dev/null || echo none`
+ fi
+ if test x"$gpg_error_config_host" != xnone ; then
+ if test x"$gpg_error_config_host" != x"$host" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING:
+***
+*** The config script \"$GPG_ERROR_CONFIG\" was
+*** built for $gpg_error_config_host and thus may not match the
+*** used host $host.
+*** You may want to use the configure option --with-libgpg-error-prefix
+*** to specify a matching config script or use \$SYSROOT.
+***" >&5
+printf "%s\n" "$as_me: WARNING:
+***
+*** The config script \"$GPG_ERROR_CONFIG\" was
+*** built for $gpg_error_config_host and thus may not match the
+*** used host $host.
+*** You may want to use the configure option --with-libgpg-error-prefix
+*** to specify a matching config script or use \$SYSROOT.
+***" >&2;}
+ gpg_config_script_warn="$gpg_config_script_warn libgpg-error"
+ fi
+ fi
+ else
+ GPG_ERROR_CFLAGS=""
+ GPG_ERROR_LIBS=""
+ GPG_ERROR_MT_CFLAGS=""
+ GPG_ERROR_MT_LIBS=""
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+ fi
+
+
+
+
+
+if test "x$GPG_ERROR_LIBS" = "x"; then
+ as_fn_error $? "libgpg-error is needed.
+ See ftp://ftp.gnupg.org/gcrypt/libgpg-error/ ." "$LINENO" 5
+fi
+
+
+printf "%s\n" "#define GPG_ERR_SOURCE_DEFAULT GPG_ERR_SOURCE_GCRYPT" >>confdefs.h
+
+
+#
+# Check whether the GNU Pth library is available. We require this
+# to build the optional gcryptrnd program.
+#
+
+# Check whether --with-pth-prefix was given.
+if test ${with_pth_prefix+y}
+then :
+ withval=$with_pth_prefix; pth_config_prefix="$withval"
+else $as_nop
+ pth_config_prefix=""
+fi
+
+if test x$pth_config_prefix != x ; then
+ PTH_CONFIG="$pth_config_prefix/bin/pth-config"
+fi
+if test "$enable_random_daemon" = "yes"; then
+ # Extract the first word of "pth-config", so it can be a program name with args.
+set dummy pth-config; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PTH_CONFIG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PTH_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PTH_CONFIG="$PTH_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PTH_CONFIG="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PTH_CONFIG" && ac_cv_path_PTH_CONFIG="no"
+ ;;
+esac
+fi
+PTH_CONFIG=$ac_cv_path_PTH_CONFIG
+if test -n "$PTH_CONFIG"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTH_CONFIG" >&5
+printf "%s\n" "$PTH_CONFIG" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ if test "$PTH_CONFIG" = "no"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING:
+***
+*** To build the Libgcrypt's random number daemon
+*** we need the support of the GNU Portable Threads Library.
+*** Download it from ftp://ftp.gnu.org/gnu/pth/
+*** On a Debian GNU/Linux system you might want to try
+*** apt-get install libpth-dev
+***" >&5
+printf "%s\n" "$as_me: WARNING:
+***
+*** To build the Libgcrypt's random number daemon
+*** we need the support of the GNU Portable Threads Library.
+*** Download it from ftp://ftp.gnu.org/gnu/pth/
+*** On a Debian GNU/Linux system you might want to try
+*** apt-get install libpth-dev
+***" >&2;}
+ else
+
+ _pth_version=`$PTH_CONFIG --version | awk 'NR==1 {print $3}'`
+ _req_version="1.3.7"
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTH - version >= $_req_version" >&5
+printf %s "checking for PTH - version >= $_req_version... " >&6; }
+ for _var in _pth_version _req_version; do
+ eval "_val=\"\$${_var}\""
+ _major=`echo $_val | sed 's/\([0-9]*\)\.\([0-9]*\)\([ab.]\)\([0-9]*\)/\1/'`
+ _minor=`echo $_val | sed 's/\([0-9]*\)\.\([0-9]*\)\([ab.]\)\([0-9]*\)/\2/'`
+ _rtype=`echo $_val | sed 's/\([0-9]*\)\.\([0-9]*\)\([ab.]\)\([0-9]*\)/\3/'`
+ _micro=`echo $_val | sed 's/\([0-9]*\)\.\([0-9]*\)\([ab.]\)\([0-9]*\)/\4/'`
+ case $_rtype in
+ "a" ) _rtype=0 ;;
+ "b" ) _rtype=1 ;;
+ "." ) _rtype=2 ;;
+ esac
+ _hex=`echo dummy | awk '{ printf("%d%02d%1d%02d", major, minor, rtype, micro); }' \
+ "major=$_major" "minor=$_minor" "rtype=$_rtype" "micro=$_micro"`
+ eval "${_var}_hex=\"\$_hex\""
+ done
+ have_pth=no
+ if test ".$_pth_version_hex" != .; then
+ if test ".$_req_version_hex" != .; then
+ if test $_pth_version_hex -ge $_req_version_hex; then
+ have_pth=yes
+ fi
+ fi
+ fi
+ if test $have_pth = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether PTH installation is sane" >&5
+printf %s "checking whether PTH installation is sane... " >&6; }
+ if test ${gnupg_cv_pth_is_sane+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ _gnupg_pth_save_cflags=$CFLAGS
+ _gnupg_pth_save_ldflags=$LDFLAGS
+ _gnupg_pth_save_libs=$LIBS
+ CFLAGS="$CFLAGS `$PTH_CONFIG --cflags`"
+ LDFLAGS="$LDFLAGS `$PTH_CONFIG --ldflags`"
+ LIBS="$LIBS `$PTH_CONFIG --libs`"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pth.h>
+
+int
+main (void)
+{
+ pth_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gnupg_cv_pth_is_sane=yes
+else $as_nop
+ gnupg_cv_pth_is_sane=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS=$_gnupg_pth_save_cflags
+ LDFLAGS=$_gnupg_pth_save_ldflags
+ LIBS=$_gnupg_pth_save_libs
+
+fi
+
+ if test $gnupg_cv_pth_is_sane != yes; then
+ have_pth=no
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_pth_is_sane" >&5
+printf "%s\n" "$gnupg_cv_pth_is_sane" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ fi
+
+ if test $have_pth = yes; then
+ PTH_CFLAGS=`$PTH_CONFIG --cflags`
+ PTH_LIBS=`$PTH_CONFIG --ldflags`
+ PTH_LIBS="$PTH_LIBS `$PTH_CONFIG --libs --all`"
+
+printf "%s\n" "#define USE_GNU_PTH 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_PTH 1" >>confdefs.h
+
+ fi
+ fi
+fi
+
+
+
+#
+# Check whether pthreads is available
+#
+if test "$have_w32_system" != yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
+printf %s "checking for pthread_create in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_create ();
+int
+main (void)
+{
+return pthread_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pthread_pthread_create=yes
+else $as_nop
+ ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_create" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_create" = xyes
+then :
+ have_pthread=yes
+fi
+
+ if test "$have_pthread" = yes; then
+
+printf "%s\n" "#define HAVE_PTHREAD 1 " >>confdefs.h
+
+ fi
+fi
+
+
+# Solaris needs -lsocket and -lnsl. Unisys system includes
+# gethostbyname in libsocket but needs libnsl for socket.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5
+printf %s "checking for library containing setsockopt... " >&6; }
+if test ${ac_cv_search_setsockopt+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char setsockopt ();
+int
+main (void)
+{
+return setsockopt ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' socket
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_setsockopt=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_setsockopt+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_setsockopt+y}
+then :
+
+else $as_nop
+ ac_cv_search_setsockopt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5
+printf "%s\n" "$ac_cv_search_setsockopt" >&6; }
+ac_res=$ac_cv_search_setsockopt
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5
+printf %s "checking for library containing setsockopt... " >&6; }
+if test ${ac_cv_search_setsockopt+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char setsockopt ();
+int
+main (void)
+{
+return setsockopt ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' socket
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib -lnsl $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_setsockopt=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_setsockopt+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_setsockopt+y}
+then :
+
+else $as_nop
+ ac_cv_search_setsockopt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5
+printf "%s\n" "$ac_cv_search_setsockopt" >&6; }
+ac_res=$ac_cv_search_setsockopt
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5
+printf %s "checking for library containing setsockopt... " >&6; }
+if test ${ac_cv_search_setsockopt+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char setsockopt ();
+int
+main (void)
+{
+return setsockopt ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_setsockopt=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_setsockopt+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_setsockopt+y}
+then :
+
+else $as_nop
+ ac_cv_search_setsockopt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5
+printf "%s\n" "$ac_cv_search_setsockopt" >&6; }
+ac_res=$ac_cv_search_setsockopt
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+##################################
+#### Checks for header files. ####
+##################################
+
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/auxv.h" "ac_cv_header_sys_auxv_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_auxv_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_AUXV_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/random.h" "ac_cv_header_sys_random_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_random_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_RANDOM_H 1" >>confdefs.h
+
+fi
+
+
+
+##########################################
+#### Checks for typedefs, structures, ####
+#### and compiler characteristics. ####
+##########################################
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* IBM XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_const=yes
+else $as_nop
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+printf "%s\n" "#define const /**/" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+printf %s "checking for inline... " >&6; }
+if test ${ac_cv_c_inline+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo (void) {return 0; }
+$ac_kw foo_t foo (void) {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+printf "%s\n" "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
+
+fi
+
+
+ ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default
+"
+if test "x$ac_cv_type_pid_t" = xyes
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if defined _WIN64 && !defined __CYGWIN__
+ LLP64
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_pid_type='int'
+else $as_nop
+ ac_pid_type='__int64'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
+
+
+fi
+
+
+
+ac_fn_c_check_type "$LINENO" "byte" "ac_cv_type_byte" "$ac_includes_default"
+if test "x$ac_cv_type_byte" = xyes
+then :
+
+printf "%s\n" "#define HAVE_BYTE 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_type "$LINENO" "ushort" "ac_cv_type_ushort" "$ac_includes_default"
+if test "x$ac_cv_type_ushort" = xyes
+then :
+
+printf "%s\n" "#define HAVE_USHORT 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_type "$LINENO" "u16" "ac_cv_type_u16" "$ac_includes_default"
+if test "x$ac_cv_type_u16" = xyes
+then :
+
+printf "%s\n" "#define HAVE_U16 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_type "$LINENO" "u32" "ac_cv_type_u32" "$ac_includes_default"
+if test "x$ac_cv_type_u32" = xyes
+then :
+
+printf "%s\n" "#define HAVE_U32 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_type "$LINENO" "u64" "ac_cv_type_u64" "$ac_includes_default"
+if test "x$ac_cv_type_u64" = xyes
+then :
+
+printf "%s\n" "#define HAVE_U64 1" >>confdefs.h
+
+
+fi
+
+
+
+
+ if test $ac_cv_header_sys_socket_h = no; then
+ ac_fn_c_check_header_compile "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default"
+if test "x$ac_cv_header_ws2tcpip_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h
+
+fi
+
+ fi
+
+ ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "
+/* <sys/types.h> is not needed according to POSIX, but the
+ <sys/socket.h> in i386-unknown-freebsd4.10 and
+ powerpc-apple-darwin5.5 required it. */
+#include <sys/types.h>
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#elif HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+#endif
+
+"
+if test "x$ac_cv_type_socklen_t" = xyes
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t equivalent" >&5
+printf %s "checking for socklen_t equivalent... " >&6; }
+if test ${gl_cv_socklen_t_equiv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Systems have either "struct sockaddr *" or
+ # "void *" as the second argument to getpeername
+ gl_cv_socklen_t_equiv=
+ for arg2 in "struct sockaddr" void; do
+ for t in int size_t "unsigned int" "long int" "unsigned long int"; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/socket.h>
+
+ int getpeername (int, $arg2 *, $t *);
+int
+main (void)
+{
+$t len;
+ getpeername (0, 0, &len);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_socklen_t_equiv="$t"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test "$gl_cv_socklen_t_equiv" != "" && break
+ done
+ test "$gl_cv_socklen_t_equiv" != "" && break
+ done
+ if test "$gl_cv_socklen_t_equiv" = ""; then
+ as_fn_error $? "Cannot find a type to use in place of socklen_t" "$LINENO" 5
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socklen_t_equiv" >&5
+printf "%s\n" "$gl_cv_socklen_t_equiv" >&6; }
+
+printf "%s\n" "#define socklen_t $gl_cv_socklen_t_equiv" >>confdefs.h
+
+fi
+
+
+#
+# Check for __builtin_bswap32 intrinsic.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_bswap32" >&5
+printf %s "checking for __builtin_bswap32... " >&6; }
+if test ${gcry_cv_have_builtin_bswap32+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_builtin_bswap32=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+int x = 0; int y = __builtin_bswap32(x); return y;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_have_builtin_bswap32=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_builtin_bswap32" >&5
+printf "%s\n" "$gcry_cv_have_builtin_bswap32" >&6; }
+if test "$gcry_cv_have_builtin_bswap32" = "yes" ; then
+
+printf "%s\n" "#define HAVE_BUILTIN_BSWAP32 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for __builtin_bswap64 intrinsic.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_bswap64" >&5
+printf %s "checking for __builtin_bswap64... " >&6; }
+if test ${gcry_cv_have_builtin_bswap64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_builtin_bswap64=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+long long x = 0; long long y = __builtin_bswap64(x); return y;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_have_builtin_bswap64=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_builtin_bswap64" >&5
+printf "%s\n" "$gcry_cv_have_builtin_bswap64" >&6; }
+if test "$gcry_cv_have_builtin_bswap64" = "yes" ; then
+
+printf "%s\n" "#define HAVE_BUILTIN_BSWAP64 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for __builtin_ctz intrinsic.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_ctz" >&5
+printf %s "checking for __builtin_ctz... " >&6; }
+if test ${gcry_cv_have_builtin_ctz+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_builtin_ctz=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+unsigned int x = 0; int y = __builtin_ctz(x); return y;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_have_builtin_ctz=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_builtin_ctz" >&5
+printf "%s\n" "$gcry_cv_have_builtin_ctz" >&6; }
+if test "$gcry_cv_have_builtin_ctz" = "yes" ; then
+
+printf "%s\n" "#define HAVE_BUILTIN_CTZ 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for __builtin_ctzl intrinsic.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_ctzl" >&5
+printf %s "checking for __builtin_ctzl... " >&6; }
+if test ${gcry_cv_have_builtin_ctzl+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_builtin_ctzl=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+unsigned long x = 0; long y = __builtin_ctzl(x); return y;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_have_builtin_ctzl=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_builtin_ctzl" >&5
+printf "%s\n" "$gcry_cv_have_builtin_ctzl" >&6; }
+if test "$gcry_cv_have_builtin_ctzl" = "yes" ; then
+
+printf "%s\n" "#define HAVE_BUILTIN_CTZL 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for __builtin_clz intrinsic.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_clz" >&5
+printf %s "checking for __builtin_clz... " >&6; }
+if test ${gcry_cv_have_builtin_clz+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_builtin_clz=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+unsigned int x = 0; int y = __builtin_clz(x); return y;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_have_builtin_clz=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_builtin_clz" >&5
+printf "%s\n" "$gcry_cv_have_builtin_clz" >&6; }
+if test "$gcry_cv_have_builtin_clz" = "yes" ; then
+
+printf "%s\n" "#define HAVE_BUILTIN_CLZ 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for __builtin_clzl intrinsic.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_clzl" >&5
+printf %s "checking for __builtin_clzl... " >&6; }
+if test ${gcry_cv_have_builtin_clzl+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_builtin_clzl=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+unsigned long x = 0; long y = __builtin_clzl(x); return y;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_have_builtin_clzl=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_builtin_clzl" >&5
+printf "%s\n" "$gcry_cv_have_builtin_clzl" >&6; }
+if test "$gcry_cv_have_builtin_clzl" = "yes" ; then
+
+printf "%s\n" "#define HAVE_BUILTIN_CLZL 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for __sync_synchronize intrinsic.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __sync_synchronize" >&5
+printf %s "checking for __sync_synchronize... " >&6; }
+if test ${gcry_cv_have_sync_synchronize+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_sync_synchronize=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+__sync_synchronize(); return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_have_sync_synchronize=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_sync_synchronize" >&5
+printf "%s\n" "$gcry_cv_have_sync_synchronize" >&6; }
+if test "$gcry_cv_have_sync_synchronize" = "yes" ; then
+
+printf "%s\n" "#define HAVE_SYNC_SYNCHRONIZE 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for VLA support (variable length arrays).
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the variable length arrays are supported" >&5
+printf %s "checking whether the variable length arrays are supported... " >&6; }
+if test ${gcry_cv_have_vla+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_vla=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void f1(char *, int);
+ char foo(int i) {
+ char b[(i < 0 ? 0 : i) + 1];
+ f1(b, sizeof b); return b[0];}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_have_vla=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_vla" >&5
+printf "%s\n" "$gcry_cv_have_vla" >&6; }
+if test "$gcry_cv_have_vla" = "yes" ; then
+
+printf "%s\n" "#define HAVE_VLA 1" >>confdefs.h
+
+fi
+
+
+#
+# Check for ELF visibility support.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the visibility attribute is supported" >&5
+printf %s "checking whether the visibility attribute is supported... " >&6; }
+if test ${gcry_cv_visibility_attribute+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_visibility_attribute=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo __attribute__ ((visibility ("hidden"))) = 1;
+ int bar __attribute__ ((visibility ("protected"))) = 1;
+
+_ACEOF
+
+ if ${CC-cc} -Werror -S conftest.c -o conftest.s \
+ 1>&5 2>&5 ; then
+ if grep '\.hidden.*foo' conftest.s >/dev/null 2>&1 ; then
+ if grep '\.protected.*bar' conftest.s >/dev/null 2>&1; then
+ gcry_cv_visibility_attribute=yes
+ fi
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_visibility_attribute" >&5
+printf "%s\n" "$gcry_cv_visibility_attribute" >&6; }
+if test "$gcry_cv_visibility_attribute" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken visibility attribute" >&5
+printf %s "checking for broken visibility attribute... " >&6; }
+if test ${gcry_cv_broken_visibility_attribute+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_broken_visibility_attribute=yes
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (int x);
+ int bar (int x) __asm__ ("foo")
+ __attribute__ ((visibility ("hidden")));
+ int bar (int x) { return x; }
+
+_ACEOF
+
+ if ${CC-cc} -Werror -S conftest.c -o conftest.s \
+ 1>&5 2>&5 ; then
+ if grep '\.hidden[ _]foo' conftest.s >/dev/null 2>&1;
+ then
+ gcry_cv_broken_visibility_attribute=no
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_broken_visibility_attribute" >&5
+printf "%s\n" "$gcry_cv_broken_visibility_attribute" >&6; }
+fi
+if test "$gcry_cv_visibility_attribute" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken alias attribute" >&5
+printf %s "checking for broken alias attribute... " >&6; }
+if test ${gcry_cv_broken_alias_attribute+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_broken_alias_attribute=yes
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern int foo (int x) __asm ("xyzzy");
+ int bar (int x) { return x; }
+ extern __typeof (bar) foo __attribute ((weak, alias ("bar")));
+ extern int dfoo;
+ extern __typeof (dfoo) dfoo __asm ("abccb");
+ int dfoo = 1;
+
+_ACEOF
+
+ if ${CC-cc} -Werror -S conftest.c -o conftest.s \
+ 1>&5 2>&5 ; then
+ if grep 'xyzzy' conftest.s >/dev/null 2>&1 && \
+ grep 'abccb' conftest.s >/dev/null 2>&1; then
+ gcry_cv_broken_alias_attribute=no
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_broken_alias_attribute" >&5
+printf "%s\n" "$gcry_cv_broken_alias_attribute" >&6; }
+fi
+if test "$gcry_cv_visibility_attribute" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -fvisibility=hidden" >&5
+printf %s "checking if gcc supports -fvisibility=hidden... " >&6; }
+if test ${gcry_cv_gcc_has_f_visibility+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_has_f_visibility=no
+ _gcc_cflags_save=$CFLAGS
+ CFLAGS="-fvisibility=hidden"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_has_f_visibility=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$_gcc_cflags_save;
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_has_f_visibility" >&5
+printf "%s\n" "$gcry_cv_gcc_has_f_visibility" >&6; }
+fi
+if test "$gcry_cv_visibility_attribute" = "yes" \
+ && test "$gcry_cv_broken_visibility_attribute" != "yes" \
+ && test "$gcry_cv_broken_alias_attribute" != "yes" \
+ && test "$gcry_cv_gcc_has_f_visibility" = "yes"
+ then
+
+printf "%s\n" "#define GCRY_USE_VISIBILITY 1" >>confdefs.h
+
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+fi
+
+
+# Following attribute tests depend on warnings to cause compile to fail,
+# so set -Werror temporarily.
+_gcc_cflags_save=$CFLAGS
+CFLAGS="$CFLAGS -Werror"
+
+
+#
+# Check whether the compiler supports the GCC style aligned attribute
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the GCC style aligned attribute is supported" >&5
+printf %s "checking whether the GCC style aligned attribute is supported... " >&6; }
+if test ${gcry_cv_gcc_attribute_aligned+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_attribute_aligned=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+struct { int a; } foo __attribute__ ((aligned (16)));
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_attribute_aligned=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_attribute_aligned" >&5
+printf "%s\n" "$gcry_cv_gcc_attribute_aligned" >&6; }
+if test "$gcry_cv_gcc_attribute_aligned" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ATTRIBUTE_ALIGNED 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether the compiler supports the GCC style packed attribute
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the GCC style packed attribute is supported" >&5
+printf %s "checking whether the GCC style packed attribute is supported... " >&6; }
+if test ${gcry_cv_gcc_attribute_packed+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_attribute_packed=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+struct foolong_s { long b; } __attribute__ ((packed));
+ struct foo_s { char a; struct foolong_s b; }
+ __attribute__ ((packed));
+ enum bar {
+ FOO = 1 / (sizeof(struct foo_s) == (sizeof(char) + sizeof(long))),
+ };
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_attribute_packed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_attribute_packed" >&5
+printf "%s\n" "$gcry_cv_gcc_attribute_packed" >&6; }
+if test "$gcry_cv_gcc_attribute_packed" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ATTRIBUTE_PACKED 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether the compiler supports the GCC style may_alias attribute
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the GCC style may_alias attribute is supported" >&5
+printf %s "checking whether the GCC style may_alias attribute is supported... " >&6; }
+if test ${gcry_cv_gcc_attribute_may_alias+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_attribute_may_alias=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef struct foo_s { int a; }
+ __attribute__ ((may_alias)) foo_t;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_attribute_may_alias=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_attribute_may_alias" >&5
+printf "%s\n" "$gcry_cv_gcc_attribute_may_alias" >&6; }
+if test "$gcry_cv_gcc_attribute_may_alias" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ATTRIBUTE_MAY_ALIAS 1" >>confdefs.h
+
+fi
+
+
+# Restore flags.
+CFLAGS=$_gcc_cflags_save;
+
+
+#
+# Check whether the compiler supports 'asm' or '__asm__' keyword for
+# assembler blocks.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether 'asm' assembler keyword is supported" >&5
+printf %s "checking whether 'asm' assembler keyword is supported... " >&6; }
+if test ${gcry_cv_have_asm+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_asm=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) { asm("":::"memory"); }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_have_asm=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_asm" >&5
+printf "%s\n" "$gcry_cv_have_asm" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether '__asm__' assembler keyword is supported" >&5
+printf %s "checking whether '__asm__' assembler keyword is supported... " >&6; }
+if test ${gcry_cv_have___asm__+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have___asm__=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) { __asm__("":::"memory"); }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_have___asm__=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have___asm__" >&5
+printf "%s\n" "$gcry_cv_have___asm__" >&6; }
+if test "$gcry_cv_have_asm" = "no" ; then
+ if test "$gcry_cv_have___asm__" = "yes" ; then
+
+printf "%s\n" "#define asm __asm__" >>confdefs.h
+
+ fi
+fi
+
+
+#
+# Check whether the compiler supports inline assembly memory barrier.
+#
+if test "$gcry_cv_have_asm" = "no" ; then
+ if test "$gcry_cv_have___asm__" = "yes" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether inline assembly memory barrier is supported" >&5
+printf %s "checking whether inline assembly memory barrier is supported... " >&6; }
+if test ${gcry_cv_have_asm_volatile_memory+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_asm_volatile_memory=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(int x)
+ {
+ __asm__ volatile("":::"memory");
+ __asm__ volatile("":"+r"(x)::"memory");
+ }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_have_asm_volatile_memory=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_asm_volatile_memory" >&5
+printf "%s\n" "$gcry_cv_have_asm_volatile_memory" >&6; }
+ fi
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether inline assembly memory barrier is supported" >&5
+printf %s "checking whether inline assembly memory barrier is supported... " >&6; }
+if test ${gcry_cv_have_asm_volatile_memory+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_have_asm_volatile_memory=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(int x)
+ {
+ asm volatile("":::"memory");
+ asm volatile("":"+r"(x)::"memory"); }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_have_asm_volatile_memory=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_have_asm_volatile_memory" >&5
+printf "%s\n" "$gcry_cv_have_asm_volatile_memory" >&6; }
+fi
+if test "$gcry_cv_have_asm_volatile_memory" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ASM_VOLATILE_MEMORY 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC assembler supports features needed for our ARM
+# implementations. This needs to be done before setting up the
+# assembler stuff.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler is compatible for ARM assembly implementations" >&5
+printf %s "checking whether GCC assembler is compatible for ARM assembly implementations... " >&6; }
+if test ${gcry_cv_gcc_arm_platform_as_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_arm_platform_as_ok="n/a"
+ else
+ gcry_cv_gcc_arm_platform_as_ok=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ /* Test if assembler supports UAL syntax. */
+ ".syntax unified\n\t"
+ ".arm\n\t" /* our assembly code is in ARM mode */
+ ".text\n\t"
+ /* Following causes error if assembler ignored '.syntax unified'. */
+ "asmfunc:\n\t"
+ "add %r0, %r0, %r4, ror #12;\n\t"
+
+ /* Test if '.type' and '.size' are supported. */
+ ".size asmfunc,.-asmfunc;\n\t"
+ ".type asmfunc,%function;\n\t"
+ );
+ void asmfunc(void);
+int
+main (void)
+{
+ asmfunc();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_arm_platform_as_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_arm_platform_as_ok" >&5
+printf "%s\n" "$gcry_cv_gcc_arm_platform_as_ok" >&6; }
+if test "$gcry_cv_gcc_arm_platform_as_ok" = "yes" ; then
+
+printf "%s\n" "#define HAVE_COMPATIBLE_GCC_ARM_PLATFORM_AS 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC assembler supports features needed for our ARMv8/Aarch64
+# implementations. This needs to be done before setting up the
+# assembler stuff.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler is compatible for ARMv8/Aarch64 assembly implementations" >&5
+printf %s "checking whether GCC assembler is compatible for ARMv8/Aarch64 assembly implementations... " >&6; }
+if test ${gcry_cv_gcc_aarch64_platform_as_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_aarch64_platform_as_ok="n/a"
+ else
+ gcry_cv_gcc_aarch64_platform_as_ok=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".text\n\t"
+ "asmfunc:\n\t"
+ "eor x0, x0, x30, ror #12;\n\t"
+ "add x0, x0, x30, asr #12;\n\t"
+ "eor v0.16b, v0.16b, v31.16b;\n\t"
+ );
+ void asmfunc(void);
+int
+main (void)
+{
+ asmfunc();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_aarch64_platform_as_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_aarch64_platform_as_ok" >&5
+printf "%s\n" "$gcry_cv_gcc_aarch64_platform_as_ok" >&6; }
+if test "$gcry_cv_gcc_aarch64_platform_as_ok" = "yes" ; then
+
+printf "%s\n" "#define HAVE_COMPATIBLE_GCC_AARCH64_PLATFORM_AS 1" >>confdefs.h
+
+fi
+
+#
+# Check whether GCC assembler supports for CFI directives.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler supports for CFI directives" >&5
+printf %s "checking whether GCC assembler supports for CFI directives... " >&6; }
+if test ${gcry_cv_gcc_asm_cfi_directives+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_asm_cfi_directives=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".text\n\t"
+ "ac_test:\n\t"
+ ".cfi_startproc\n\t"
+ ".cfi_remember_state\n\t"
+ ".cfi_adjust_cfa_offset 8\n\t"
+ ".cfi_rel_offset 0, 8\n\t"
+ ".cfi_def_cfa_register 1\n\t"
+ ".cfi_register 2, 3\n\t"
+ ".cfi_restore 2\n\t"
+ ".cfi_escape 0x0f, 0x02, 0x11, 0x00\n\t"
+ ".cfi_restore_state\n\t"
+ ".long 0\n\t"
+ ".cfi_endproc\n\t"
+ );
+ void asmfunc(void)
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_asm_cfi_directives=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_asm_cfi_directives" >&5
+printf "%s\n" "$gcry_cv_gcc_asm_cfi_directives" >&6; }
+if test "$gcry_cv_gcc_asm_cfi_directives" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ASM_CFI_DIRECTIVES 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC assembler supports for ELF directives.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler supports for ELF directives" >&5
+printf %s "checking whether GCC assembler supports for ELF directives... " >&6; }
+if test ${gcry_cv_gcc_asm_elf_directives+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_asm_elf_directives=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ /* Test if ELF directives '.type' and '.size' are supported. */
+ ".text\n\t"
+ "asmfunc:\n\t"
+ ".size asmfunc,.-asmfunc;\n\t"
+ ".type asmfunc,STT_FUNC;\n\t"
+ );
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_asm_elf_directives=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_asm_elf_directives" >&5
+printf "%s\n" "$gcry_cv_gcc_asm_elf_directives" >&6; }
+if test "$gcry_cv_gcc_asm_elf_directives" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ASM_ELF_DIRECTIVES 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether underscores in symbols are required. This needs to be
+# done before setting up the assembler stuff.
+#
+
+tmp_do_check="no"
+case "${host}" in
+ i?86-mingw32* | i?86-*-mingw32*)
+ ac_cv_sys_symbol_underscore=yes
+ ;;
+ x86_64-*-mingw32*)
+ ac_cv_sys_symbol_underscore=no
+ ;;
+ i386-emx-os2 | i345686-pc-os2*emx | i386-pc-msdosdjgpp)
+ ac_cv_sys_symbol_underscore=yes
+ ;;
+ *)
+ if test "$cross_compiling" != yes; then
+ tmp_do_check="yes"
+ fi
+ ;;
+esac
+if test "$tmp_do_check" = "yes"; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5
+printf %s "checking for _ prefix in compiled symbols... " >&6; }
+ if test ${ac_cv_sys_symbol_underscore+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_sys_symbol_underscore=no
+ cat > conftest.$ac_ext <<EOF
+ void nm_test_func(){}
+ int main(){nm_test_func;return 0;}
+EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ ac_nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \| cut -d \' \' -f 2 \> $ac_nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \| cut -d \' \' -f 2 \> $ac_nlist) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$ac_nlist"; then
+ # See whether the symbols have a leading underscore.
+ if egrep '^_nm_test_func' "$ac_nlist" >/dev/null; then
+ ac_cv_sys_symbol_underscore=yes
+ else
+ if egrep '^nm_test_func ' "$ac_nlist" >/dev/null; then
+ :
+ else
+ echo "configure: cannot find nm_test_func in $ac_nlist" >&5
+ fi
+ fi
+ else
+ echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "configure: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ rm -rf conftest*
+
+fi
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5
+printf %s "checking for _ prefix in compiled symbols... " >&6; }
+ fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_symbol_underscore" >&5
+printf "%s\n" "$ac_cv_sys_symbol_underscore" >&6; }
+if test x$ac_cv_sys_symbol_underscore = xyes; then
+
+printf "%s\n" "#define WITH_SYMBOL_UNDERSCORE 1" >>confdefs.h
+
+fi
+
+
+
+#################################
+#### ####
+#### Setup assembler stuff. ####
+#### Define mpi_cpu_arch. ####
+#### ####
+#################################
+# Check whether --enable-mpi-path was given.
+if test ${enable_mpi_path+y}
+then :
+ enableval=$enable_mpi_path; mpi_extra_path="$enableval"
+else $as_nop
+ mpi_extra_path=""
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking architecture and mpi assembler functions" >&5
+printf %s "checking architecture and mpi assembler functions... " >&6; }
+if test -f $srcdir/mpi/config.links ; then
+ . $srcdir/mpi/config.links
+ ac_config_links="$ac_config_links "$mpi_ln_list""
+
+ ac_cv_mpi_sflags="$mpi_sflags"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mpi_cpu_arch" >&5
+printf "%s\n" "$mpi_cpu_arch" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
+ as_fn_error $? "mpi/config.links missing!" "$LINENO" 5
+fi
+MPI_SFLAGS="$ac_cv_mpi_sflags"
+
+
+ if test "$mpi_mod_asm_mpih_add1" = yes; then
+ MPI_MOD_ASM_MPIH_ADD1_TRUE=
+ MPI_MOD_ASM_MPIH_ADD1_FALSE='#'
+else
+ MPI_MOD_ASM_MPIH_ADD1_TRUE='#'
+ MPI_MOD_ASM_MPIH_ADD1_FALSE=
+fi
+
+ if test "$mpi_mod_asm_mpih_sub1" = yes; then
+ MPI_MOD_ASM_MPIH_SUB1_TRUE=
+ MPI_MOD_ASM_MPIH_SUB1_FALSE='#'
+else
+ MPI_MOD_ASM_MPIH_SUB1_TRUE='#'
+ MPI_MOD_ASM_MPIH_SUB1_FALSE=
+fi
+
+ if test "$mpi_mod_asm_mpih_mul1" = yes; then
+ MPI_MOD_ASM_MPIH_MUL1_TRUE=
+ MPI_MOD_ASM_MPIH_MUL1_FALSE='#'
+else
+ MPI_MOD_ASM_MPIH_MUL1_TRUE='#'
+ MPI_MOD_ASM_MPIH_MUL1_FALSE=
+fi
+
+ if test "$mpi_mod_asm_mpih_mul2" = yes; then
+ MPI_MOD_ASM_MPIH_MUL2_TRUE=
+ MPI_MOD_ASM_MPIH_MUL2_FALSE='#'
+else
+ MPI_MOD_ASM_MPIH_MUL2_TRUE='#'
+ MPI_MOD_ASM_MPIH_MUL2_FALSE=
+fi
+
+ if test "$mpi_mod_asm_mpih_mul3" = yes; then
+ MPI_MOD_ASM_MPIH_MUL3_TRUE=
+ MPI_MOD_ASM_MPIH_MUL3_FALSE='#'
+else
+ MPI_MOD_ASM_MPIH_MUL3_TRUE='#'
+ MPI_MOD_ASM_MPIH_MUL3_FALSE=
+fi
+
+ if test "$mpi_mod_asm_mpih_lshift" = yes; then
+ MPI_MOD_ASM_MPIH_LSHIFT_TRUE=
+ MPI_MOD_ASM_MPIH_LSHIFT_FALSE='#'
+else
+ MPI_MOD_ASM_MPIH_LSHIFT_TRUE='#'
+ MPI_MOD_ASM_MPIH_LSHIFT_FALSE=
+fi
+
+ if test "$mpi_mod_asm_mpih_rshift" = yes; then
+ MPI_MOD_ASM_MPIH_RSHIFT_TRUE=
+ MPI_MOD_ASM_MPIH_RSHIFT_FALSE='#'
+else
+ MPI_MOD_ASM_MPIH_RSHIFT_TRUE='#'
+ MPI_MOD_ASM_MPIH_RSHIFT_FALSE=
+fi
+
+ if test "$mpi_mod_asm_udiv" = yes; then
+ MPI_MOD_ASM_UDIV_TRUE=
+ MPI_MOD_ASM_UDIV_FALSE='#'
+else
+ MPI_MOD_ASM_UDIV_TRUE='#'
+ MPI_MOD_ASM_UDIV_FALSE=
+fi
+
+ if test "$mpi_mod_asm_udiv_qrnnd" = yes; then
+ MPI_MOD_ASM_UDIV_QRNND_TRUE=
+ MPI_MOD_ASM_UDIV_QRNND_FALSE='#'
+else
+ MPI_MOD_ASM_UDIV_QRNND_TRUE='#'
+ MPI_MOD_ASM_UDIV_QRNND_FALSE=
+fi
+
+ if test "$mpi_mod_c_mpih_add1" = yes; then
+ MPI_MOD_C_MPIH_ADD1_TRUE=
+ MPI_MOD_C_MPIH_ADD1_FALSE='#'
+else
+ MPI_MOD_C_MPIH_ADD1_TRUE='#'
+ MPI_MOD_C_MPIH_ADD1_FALSE=
+fi
+
+ if test "$mpi_mod_c_mpih_sub1" = yes; then
+ MPI_MOD_C_MPIH_SUB1_TRUE=
+ MPI_MOD_C_MPIH_SUB1_FALSE='#'
+else
+ MPI_MOD_C_MPIH_SUB1_TRUE='#'
+ MPI_MOD_C_MPIH_SUB1_FALSE=
+fi
+
+ if test "$mpi_mod_c_mpih_mul1" = yes; then
+ MPI_MOD_C_MPIH_MUL1_TRUE=
+ MPI_MOD_C_MPIH_MUL1_FALSE='#'
+else
+ MPI_MOD_C_MPIH_MUL1_TRUE='#'
+ MPI_MOD_C_MPIH_MUL1_FALSE=
+fi
+
+ if test "$mpi_mod_c_mpih_mul2" = yes; then
+ MPI_MOD_C_MPIH_MUL2_TRUE=
+ MPI_MOD_C_MPIH_MUL2_FALSE='#'
+else
+ MPI_MOD_C_MPIH_MUL2_TRUE='#'
+ MPI_MOD_C_MPIH_MUL2_FALSE=
+fi
+
+ if test "$mpi_mod_c_mpih_mul3" = yes; then
+ MPI_MOD_C_MPIH_MUL3_TRUE=
+ MPI_MOD_C_MPIH_MUL3_FALSE='#'
+else
+ MPI_MOD_C_MPIH_MUL3_TRUE='#'
+ MPI_MOD_C_MPIH_MUL3_FALSE=
+fi
+
+ if test "$mpi_mod_c_mpih_lshift" = yes; then
+ MPI_MOD_C_MPIH_LSHIFT_TRUE=
+ MPI_MOD_C_MPIH_LSHIFT_FALSE='#'
+else
+ MPI_MOD_C_MPIH_LSHIFT_TRUE='#'
+ MPI_MOD_C_MPIH_LSHIFT_FALSE=
+fi
+
+ if test "$mpi_mod_c_mpih_rshift" = yes; then
+ MPI_MOD_C_MPIH_RSHIFT_TRUE=
+ MPI_MOD_C_MPIH_RSHIFT_FALSE='#'
+else
+ MPI_MOD_C_MPIH_RSHIFT_TRUE='#'
+ MPI_MOD_C_MPIH_RSHIFT_FALSE=
+fi
+
+ if test "$mpi_mod_c_udiv" = yes; then
+ MPI_MOD_C_UDIV_TRUE=
+ MPI_MOD_C_UDIV_FALSE='#'
+else
+ MPI_MOD_C_UDIV_TRUE='#'
+ MPI_MOD_C_UDIV_FALSE=
+fi
+
+ if test "$mpi_mod_c_udiv_qrnnd" = yes; then
+ MPI_MOD_C_UDIV_QRNND_TRUE=
+ MPI_MOD_C_UDIV_QRNND_FALSE='#'
+else
+ MPI_MOD_C_UDIV_QRNND_TRUE='#'
+ MPI_MOD_C_UDIV_QRNND_FALSE=
+fi
+
+
+# Reset non applicable feature flags.
+if test "$mpi_cpu_arch" != "x86" ; then
+ aesnisupport="n/a"
+ shaextsupport="n/a"
+ pclmulsupport="n/a"
+ sse41support="n/a"
+ avxsupport="n/a"
+ avx2support="n/a"
+ padlocksupport="n/a"
+ drngsupport="n/a"
+fi
+
+if test "$mpi_cpu_arch" != "arm" ; then
+ if test "$mpi_cpu_arch" != "aarch64" ; then
+ neonsupport="n/a"
+ armcryptosupport="n/a"
+ fi
+fi
+
+if test "$mpi_cpu_arch" != "ppc"; then
+ ppccryptosupport="n/a"
+fi
+
+#############################################
+#### ####
+#### Platform specific compiler checks. ####
+#### ####
+#############################################
+
+
+# Following tests depend on warnings to cause compile to fail, so set -Werror
+# temporarily.
+_gcc_cflags_save=$CFLAGS
+CFLAGS="$CFLAGS -Werror"
+
+
+#
+# Check whether compiler supports 'ms_abi' function attribute.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler supports 'ms_abi' function attribute" >&5
+printf %s "checking whether compiler supports 'ms_abi' function attribute... " >&6; }
+if test ${gcry_cv_gcc_attribute_ms_abi+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_attribute_ms_abi=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int __attribute__ ((ms_abi)) proto(int);
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_attribute_ms_abi=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_attribute_ms_abi" >&5
+printf "%s\n" "$gcry_cv_gcc_attribute_ms_abi" >&6; }
+if test "$gcry_cv_gcc_attribute_ms_abi" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ATTRIBUTE_MS_ABI 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether compiler supports 'sysv_abi' function attribute.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler supports 'sysv_abi' function attribute" >&5
+printf %s "checking whether compiler supports 'sysv_abi' function attribute... " >&6; }
+if test ${gcry_cv_gcc_attribute_sysv_abi+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_attribute_sysv_abi=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int __attribute__ ((sysv_abi)) proto(int);
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_attribute_sysv_abi=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_attribute_sysv_abi" >&5
+printf "%s\n" "$gcry_cv_gcc_attribute_sysv_abi" >&6; }
+if test "$gcry_cv_gcc_attribute_sysv_abi" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_ATTRIBUTE_SYSV_ABI 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether default calling convention is 'ms_abi'.
+#
+if test "$gcry_cv_gcc_attribute_ms_abi" = "yes" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether default calling convention is 'ms_abi'" >&5
+printf %s "checking whether default calling convention is 'ms_abi'... " >&6; }
+if test ${gcry_cv_gcc_default_abi_is_ms_abi+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_default_abi_is_ms_abi=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void *test(void) {
+ void *(*def_func)(void) = test;
+ void *__attribute__((ms_abi))(*msabi_func)(void);
+ /* warning on SysV abi targets, passes on Windows based targets */
+ msabi_func = def_func;
+ return msabi_func;
+ }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_default_abi_is_ms_abi=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_default_abi_is_ms_abi" >&5
+printf "%s\n" "$gcry_cv_gcc_default_abi_is_ms_abi" >&6; }
+ if test "$gcry_cv_gcc_default_abi_is_ms_abi" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_DEFAULT_ABI_IS_MS_ABI 1" >>confdefs.h
+
+ fi
+fi
+
+
+#
+# Check whether default calling convention is 'sysv_abi'.
+#
+if test "$gcry_cv_gcc_attribute_sysv_abi" = "yes" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether default calling convention is 'sysv_abi'" >&5
+printf %s "checking whether default calling convention is 'sysv_abi'... " >&6; }
+if test ${gcry_cv_gcc_default_abi_is_sysv_abi+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_default_abi_is_sysv_abi=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void *test(void) {
+ void *(*def_func)(void) = test;
+ void *__attribute__((sysv_abi))(*sysvabi_func)(void);
+ /* warning on MS ABI targets, passes on SysV ABI targets */
+ sysvabi_func = def_func;
+ return sysvabi_func;
+ }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_gcc_default_abi_is_sysv_abi=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_default_abi_is_sysv_abi" >&5
+printf "%s\n" "$gcry_cv_gcc_default_abi_is_sysv_abi" >&6; }
+ if test "$gcry_cv_gcc_default_abi_is_sysv_abi" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_DEFAULT_ABI_IS_SYSV_ABI 1" >>confdefs.h
+
+ fi
+fi
+
+
+# Restore flags.
+CFLAGS=$_gcc_cflags_save;
+
+
+#
+# Check whether GCC inline assembler supports SSSE3 instructions
+# This is required for the AES-NI instructions.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports SSSE3 instructions" >&5
+printf %s "checking whether GCC inline assembler supports SSSE3 instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_ssse3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_ssse3="n/a"
+ else
+ gcry_cv_gcc_inline_asm_ssse3=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+static unsigned char be_mask[16] __attribute__ ((aligned (16))) =
+ { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
+ void a(void) {
+ __asm__("pshufb %[mask], %%xmm2\n\t"::[mask]"m"(*be_mask):);
+ }
+int
+main (void)
+{
+ a();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_ssse3=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_ssse3" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_ssse3" >&6; }
+if test "$gcry_cv_gcc_inline_asm_ssse3" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_SSSE3 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports PCLMUL instructions.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports PCLMUL instructions" >&5
+printf %s "checking whether GCC inline assembler supports PCLMUL instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_pclmul+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_pclmul="n/a"
+ else
+ gcry_cv_gcc_inline_asm_pclmul=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) {
+ __asm__("pclmulqdq \$0, %%xmm1, %%xmm3\n\t":::"cc");
+ }
+int
+main (void)
+{
+ a();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_pclmul=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_pclmul" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_pclmul" >&6; }
+if test "$gcry_cv_gcc_inline_asm_pclmul" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_PCLMUL 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports SHA Extensions instructions.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports SHA Extensions instructions" >&5
+printf %s "checking whether GCC inline assembler supports SHA Extensions instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_shaext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_shaext="n/a"
+ else
+ gcry_cv_gcc_inline_asm_shaext=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) {
+ __asm__("sha1rnds4 \$0, %%xmm1, %%xmm3\n\t":::"cc");
+ __asm__("sha1nexte %%xmm1, %%xmm3\n\t":::"cc");
+ __asm__("sha1msg1 %%xmm1, %%xmm3\n\t":::"cc");
+ __asm__("sha1msg2 %%xmm1, %%xmm3\n\t":::"cc");
+ __asm__("sha256rnds2 %%xmm0, %%xmm1, %%xmm3\n\t":::"cc");
+ __asm__("sha256msg1 %%xmm1, %%xmm3\n\t":::"cc");
+ __asm__("sha256msg2 %%xmm1, %%xmm3\n\t":::"cc");
+ }
+int
+main (void)
+{
+ a();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_shaext=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_shaext" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_shaext" >&6; }
+if test "$gcry_cv_gcc_inline_asm_shaext" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_SHAEXT 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports SSE4.1 instructions.
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports SSE4.1 instructions" >&5
+printf %s "checking whether GCC inline assembler supports SSE4.1 instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_sse41+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_sse41="n/a"
+ else
+ gcry_cv_gcc_inline_asm_sse41=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) {
+ int i;
+ __asm__("pextrd \$2, %%xmm0, %[out]\n\t" : [out] "=m" (i));
+ }
+int
+main (void)
+{
+ a();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_sse41=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_sse41" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_sse41" >&6; }
+if test "$gcry_cv_gcc_inline_asm_sse41" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_SSE41 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports AVX instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports AVX instructions" >&5
+printf %s "checking whether GCC inline assembler supports AVX instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_avx+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_avx="n/a"
+ else
+ gcry_cv_gcc_inline_asm_avx=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) {
+ __asm__("xgetbv; vaesdeclast (%[mem]),%%xmm0,%%xmm7\n\t"::[mem]"r"(0):);
+ }
+int
+main (void)
+{
+ a();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_avx=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_avx" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_avx" >&6; }
+if test "$gcry_cv_gcc_inline_asm_avx" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_AVX 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports AVX2 instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports AVX2 instructions" >&5
+printf %s "checking whether GCC inline assembler supports AVX2 instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_avx2+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_avx2="n/a"
+ else
+ gcry_cv_gcc_inline_asm_avx2=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) {
+ __asm__("xgetbv; vpbroadcastb %%xmm7,%%ymm1\n\t":::"cc");
+ }
+int
+main (void)
+{
+ a();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_avx2=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_avx2" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_avx2" >&6; }
+if test "$gcry_cv_gcc_inline_asm_avx2" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_AVX2 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports VAES and VPCLMUL instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports VAES and VPCLMUL instructions" >&5
+printf %s "checking whether GCC inline assembler supports VAES and VPCLMUL instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_vaes_vpclmul+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_vaes_vpclmul="n/a"
+ else
+ gcry_cv_gcc_inline_asm_vaes_vpclmul=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void a(void) {
+ __asm__("vaesenclast %%ymm7,%%ymm7,%%ymm1\n\t":::"cc");/*256-bit*/
+ __asm__("vaesenclast %%zmm7,%%zmm7,%%zmm1\n\t":::"cc");/*512-bit*/
+ __asm__("vpclmulqdq \$0,%%ymm7,%%ymm7,%%ymm1\n\t":::"cc");/*256-bit*/
+ __asm__("vpclmulqdq \$0,%%zmm7,%%zmm7,%%zmm1\n\t":::"cc");/*512-bit*/
+ }
+int
+main (void)
+{
+ a();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_vaes_vpclmul=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_vaes_vpclmul" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_vaes_vpclmul" >&6; }
+if test "$gcry_cv_gcc_inline_asm_vaes_vpclmul" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_VAES_VPCLMUL 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports BMI2 instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports BMI2 instructions" >&5
+printf %s "checking whether GCC inline assembler supports BMI2 instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_bmi2+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_bmi2="n/a"
+ else
+ gcry_cv_gcc_inline_asm_bmi2=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+unsigned int a(unsigned int x, unsigned int y) {
+ unsigned int tmp1, tmp2;
+ asm ("rorxl %2, %1, %0"
+ : "=r" (tmp1)
+ : "rm0" (x), "J" (32 - ((23) & 31)));
+ asm ("andnl %2, %1, %0"
+ : "=r" (tmp2)
+ : "r0" (x), "rm" (y));
+ return tmp1 + tmp2;
+ }
+int
+main (void)
+{
+ a(1, 2);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_bmi2=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_bmi2" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_bmi2" >&6; }
+if test "$gcry_cv_gcc_inline_asm_bmi2" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_BMI2 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC assembler needs "-Wa,--divide" to correctly handle
+# constant division
+#
+if test $amd64_as_feature_detection = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler handles division correctly" >&5
+printf %s "checking whether GCC assembler handles division correctly... " >&6; }
+if test ${gcry_cv_gcc_as_const_division_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_as_const_division_ok=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(".text\n\tfn:\n\t xorl \$(123456789/12345678), %ebp;\n\t");
+ void fn(void);
+int
+main (void)
+{
+fn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_as_const_division_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_as_const_division_ok" >&5
+printf "%s\n" "$gcry_cv_gcc_as_const_division_ok" >&6; }
+ if test "$gcry_cv_gcc_as_const_division_ok" = "no" ; then
+ #
+ # Add '-Wa,--divide' to CPPFLAGS and try check again.
+ #
+ _gcc_cppflags_save="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -Wa,--divide"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler handles division correctly with \"-Wa,--divide\"" >&5
+printf %s "checking whether GCC assembler handles division correctly with \"-Wa,--divide\"... " >&6; }
+if test ${gcry_cv_gcc_as_const_division_with_wadivide_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_as_const_division_with_wadivide_ok=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(".text\n\tfn:\n\t xorl \$(123456789/12345678), %ebp;\n\t");
+ void fn(void);
+int
+main (void)
+{
+fn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_as_const_division_with_wadivide_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_as_const_division_with_wadivide_ok" >&5
+printf "%s\n" "$gcry_cv_gcc_as_const_division_with_wadivide_ok" >&6; }
+ if test "$gcry_cv_gcc_as_const_division_with_wadivide_ok" = "no" ; then
+ # '-Wa,--divide' did not work, restore old flags.
+ CPPFLAGS="$_gcc_cppflags_save"
+ fi
+ fi
+fi
+
+
+#
+# Check whether GCC assembler supports features needed for our amd64
+# implementations
+#
+if test $amd64_as_feature_detection = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler is compatible for amd64 assembly implementations" >&5
+printf %s "checking whether GCC assembler is compatible for amd64 assembly implementations... " >&6; }
+if test ${gcry_cv_gcc_amd64_platform_as_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_amd64_platform_as_ok="n/a"
+ else
+ gcry_cv_gcc_amd64_platform_as_ok=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ /* Test if '.type' and '.size' are supported. */
+ /* These work only on ELF targets. */
+ ".text\n\t"
+ "asmfunc:\n\t"
+ ".size asmfunc,.-asmfunc;\n\t"
+ ".type asmfunc,@function;\n\t"
+ /* Test if assembler allows use of '/' for constant division
+ * (Solaris/x86 issue). If previous constant division check
+ * and "-Wa,--divide" workaround failed, this causes assembly
+ * to be disable on this machine. */
+ "xorl \$(123456789/12345678), %ebp;\n\t"
+ );
+ void asmfunc(void);
+int
+main (void)
+{
+ asmfunc();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_amd64_platform_as_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_amd64_platform_as_ok" >&5
+printf "%s\n" "$gcry_cv_gcc_amd64_platform_as_ok" >&6; }
+ if test "$gcry_cv_gcc_amd64_platform_as_ok" = "yes" ; then
+
+printf "%s\n" "#define HAVE_COMPATIBLE_GCC_AMD64_PLATFORM_AS 1" >>confdefs.h
+
+ fi
+ if test "$gcry_cv_gcc_amd64_platform_as_ok" = "no" &&
+ test "$gcry_cv_gcc_attribute_sysv_abi" = "yes" &&
+ test "$gcry_cv_gcc_default_abi_is_ms_abi" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler is compatible for WIN64 assembly implementations" >&5
+printf %s "checking whether GCC assembler is compatible for WIN64 assembly implementations... " >&6; }
+if test ${gcry_cv_gcc_win64_platform_as_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_gcc_win64_platform_as_ok=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".text\n\t"
+ ".globl asmfunc\n\t"
+ "asmfunc:\n\t"
+ "xorq \$(1234), %rbp;\n\t"
+ );
+ void asmfunc(void);
+int
+main (void)
+{
+ asmfunc();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_win64_platform_as_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_win64_platform_as_ok" >&5
+printf "%s\n" "$gcry_cv_gcc_win64_platform_as_ok" >&6; }
+ if test "$gcry_cv_gcc_win64_platform_as_ok" = "yes" ; then
+
+printf "%s\n" "#define HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS 1" >>confdefs.h
+
+ fi
+ fi
+fi
+
+
+#
+# Check whether GCC assembler supports features needed for assembly
+# implementations that use Intel syntax
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC assembler is compatible for Intel syntax assembly implementations" >&5
+printf %s "checking whether GCC assembler is compatible for Intel syntax assembly implementations... " >&6; }
+if test ${gcry_cv_gcc_platform_as_ok_for_intel_syntax+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "x86" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_platform_as_ok_for_intel_syntax="n/a"
+ else
+ gcry_cv_gcc_platform_as_ok_for_intel_syntax=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".intel_syntax noprefix\n\t"
+ ".text\n\t"
+ "actest:\n\t"
+ "pxor xmm1, xmm7;\n\t"
+ "vperm2i128 ymm2, ymm3, ymm0, 1;\n\t"
+ "add eax, ebp;\n\t"
+ "rorx eax, ebp, 1;\n\t"
+ "sub eax, [esp + 4];\n\t"
+ "add dword ptr [esp + eax], 0b10101;\n\t"
+ ".att_syntax prefix\n\t"
+ );
+ void actest(void);
+int
+main (void)
+{
+ actest();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_platform_as_ok_for_intel_syntax=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_platform_as_ok_for_intel_syntax" >&5
+printf "%s\n" "$gcry_cv_gcc_platform_as_ok_for_intel_syntax" >&6; }
+if test "$gcry_cv_gcc_platform_as_ok_for_intel_syntax" = "yes" ; then
+
+printf "%s\n" "#define HAVE_INTEL_SYNTAX_PLATFORM_AS 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether compiler is configured for ARMv6 or newer architecture
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler is configured for ARMv6 or newer architecture" >&5
+printf %s "checking whether compiler is configured for ARMv6 or newer architecture... " >&6; }
+if test ${gcry_cv_cc_arm_arch_is_v6+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "arm" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_cc_arm_arch_is_v6="n/a"
+ else
+ gcry_cv_cc_arm_arch_is_v6=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if defined(__arm__) && \
+ ((defined(__ARM_ARCH) && __ARM_ARCH >= 6) \
+ || defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) \
+ || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
+ || defined(__ARM_ARCH_7EM__))
+ /* empty */
+ #else
+ /* fail compile if not ARMv6. */
+ not_armv6 not_armv6 = (not_armv6)not_armv6;
+ #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_cc_arm_arch_is_v6=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_cc_arm_arch_is_v6" >&5
+printf "%s\n" "$gcry_cv_cc_arm_arch_is_v6" >&6; }
+if test "$gcry_cv_cc_arm_arch_is_v6" = "yes" ; then
+
+printf "%s\n" "#define HAVE_ARM_ARCH_V6 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports NEON instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports NEON instructions" >&5
+printf %s "checking whether GCC inline assembler supports NEON instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_neon+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "arm" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_neon="n/a"
+ else
+ gcry_cv_gcc_inline_asm_neon=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".syntax unified\n\t"
+ ".arm\n\t"
+ ".fpu neon\n\t"
+ ".text\n\t"
+ "testfn:\n\t"
+ "vld1.64 {%q0-%q1}, [%r0]!;\n\t"
+ "vrev64.8 %q0, %q3;\n\t"
+ "vadd.u64 %q0, %q1;\n\t"
+ "vadd.s64 %d3, %d2, %d3;\n\t"
+ );
+ void testfn(void);
+
+int
+main (void)
+{
+ testfn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_neon=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_neon" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_neon" >&6; }
+if test "$gcry_cv_gcc_inline_asm_neon" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_NEON 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports AArch32 Crypto Extension instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports AArch32 Crypto Extension instructions" >&5
+printf %s "checking whether GCC inline assembler supports AArch32 Crypto Extension instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_aarch32_crypto+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "arm" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_aarch32_crypto="n/a"
+ else
+ gcry_cv_gcc_inline_asm_aarch32_crypto=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".syntax unified\n\t"
+ ".arch armv8-a\n\t"
+ ".arm\n\t"
+ ".fpu crypto-neon-fp-armv8\n\t"
+ ".text\n\t"
+
+ "testfn:\n\t"
+ "sha1h.32 q0, q0;\n\t"
+ "sha1c.32 q0, q0, q0;\n\t"
+ "sha1p.32 q0, q0, q0;\n\t"
+ "sha1su0.32 q0, q0, q0;\n\t"
+ "sha1su1.32 q0, q0;\n\t"
+
+ "sha256h.32 q0, q0, q0;\n\t"
+ "sha256h2.32 q0, q0, q0;\n\t"
+ "sha1p.32 q0, q0, q0;\n\t"
+ "sha256su0.32 q0, q0;\n\t"
+ "sha256su1.32 q0, q0, q15;\n\t"
+
+ "aese.8 q0, q0;\n\t"
+ "aesd.8 q0, q0;\n\t"
+ "aesmc.8 q0, q0;\n\t"
+ "aesimc.8 q0, q0;\n\t"
+
+ "vmull.p64 q0, d0, d0;\n\t"
+ );
+ void testfn(void);
+
+int
+main (void)
+{
+ testfn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_aarch32_crypto=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_aarch32_crypto" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_aarch32_crypto" >&6; }
+if test "$gcry_cv_gcc_inline_asm_aarch32_crypto" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_AARCH32_CRYPTO 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports AArch64 NEON instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports AArch64 NEON instructions" >&5
+printf %s "checking whether GCC inline assembler supports AArch64 NEON instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_aarch64_neon+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "aarch64" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_aarch64_neon="n/a"
+ else
+ gcry_cv_gcc_inline_asm_aarch64_neon=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".cpu generic+simd\n\t"
+ ".text\n\t"
+ "testfn:\n\t"
+ "mov w0, \#42;\n\t"
+ "dup v0.8b, w0;\n\t"
+ "ld4 {v0.8b,v1.8b,v2.8b,v3.8b},[x0],\#32;\n\t"
+ );
+ void testfn(void);
+
+int
+main (void)
+{
+ testfn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_aarch64_neon=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_aarch64_neon" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_aarch64_neon" >&6; }
+if test "$gcry_cv_gcc_inline_asm_aarch64_neon" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_AARCH64_NEON 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports AArch64 Crypto Extension instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports AArch64 Crypto Extension instructions" >&5
+printf %s "checking whether GCC inline assembler supports AArch64 Crypto Extension instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_aarch64_crypto+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "aarch64" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_aarch64_crypto="n/a"
+ else
+ gcry_cv_gcc_inline_asm_aarch64_crypto=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(
+ ".cpu generic+simd+crypto\n\t"
+ ".text\n\t"
+ "testfn:\n\t"
+ "mov w0, \#42;\n\t"
+ "dup v0.8b, w0;\n\t"
+ "ld4 {v0.8b,v1.8b,v2.8b,v3.8b},[x0],\#32;\n\t"
+
+ "sha1h s0, s0;\n\t"
+ "sha1c q0, s0, v0.4s;\n\t"
+ "sha1p q0, s0, v0.4s;\n\t"
+ "sha1su0 v0.4s, v0.4s, v0.4s;\n\t"
+ "sha1su1 v0.4s, v0.4s;\n\t"
+
+ "sha256h q0, q0, v0.4s;\n\t"
+ "sha256h2 q0, q0, v0.4s;\n\t"
+ "sha1p q0, s0, v0.4s;\n\t"
+ "sha256su0 v0.4s, v0.4s;\n\t"
+ "sha256su1 v0.4s, v0.4s, v31.4s;\n\t"
+
+ "aese v0.16b, v0.16b;\n\t"
+ "aesd v0.16b, v0.16b;\n\t"
+ "aesmc v0.16b, v0.16b;\n\t"
+ "aesimc v0.16b, v0.16b;\n\t"
+
+ "pmull v0.1q, v0.1d, v31.1d;\n\t"
+ "pmull2 v0.1q, v0.2d, v31.2d;\n\t"
+ );
+ void testfn(void);
+
+int
+main (void)
+{
+ testfn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_aarch64_crypto=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_aarch64_crypto" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_aarch64_crypto" >&6; }
+if test "$gcry_cv_gcc_inline_asm_aarch64_crypto" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_AARCH64_CRYPTO 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether PowerPC AltiVec/VSX intrinsics
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler supports PowerPC AltiVec/VSX intrinsics" >&5
+printf %s "checking whether compiler supports PowerPC AltiVec/VSX intrinsics... " >&6; }
+if test ${gcry_cv_cc_ppc_altivec+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "ppc" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_cc_ppc_altivec="n/a"
+ else
+ gcry_cv_cc_ppc_altivec=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <altivec.h>
+ typedef vector unsigned char block;
+ typedef vector unsigned int vecu32;
+ block fn(block in)
+ {
+ block t = vec_perm (in, in, vec_vsx_ld (0, (unsigned char*)0));
+ vecu32 y = vec_vsx_ld (0, (unsigned int*)0);
+ return vec_cipher_be (t, in) ^ (block)y;
+ }
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_cc_ppc_altivec=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_cc_ppc_altivec" >&5
+printf "%s\n" "$gcry_cv_cc_ppc_altivec" >&6; }
+if test "$gcry_cv_cc_ppc_altivec" = "yes" ; then
+
+printf "%s\n" "#define HAVE_COMPATIBLE_CC_PPC_ALTIVEC 1" >>confdefs.h
+
+fi
+
+_gcc_cflags_save=$CFLAGS
+CFLAGS="$CFLAGS -maltivec -mvsx -mcrypto"
+
+if test "$gcry_cv_cc_ppc_altivec" = "no" &&
+ test "$mpi_cpu_arch" = "ppc" &&
+ test "$try_asm_modules" == "yes" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether compiler supports PowerPC AltiVec/VSX/crypto intrinsics with extra GCC flags" >&5
+printf %s "checking whether compiler supports PowerPC AltiVec/VSX/crypto intrinsics with extra GCC flags... " >&6; }
+if test ${gcry_cv_cc_ppc_altivec_cflags+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gcry_cv_cc_ppc_altivec_cflags=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <altivec.h>
+ typedef vector unsigned char block;
+ typedef vector unsigned int vecu32;
+ block fn(block in)
+ {
+ block t = vec_perm (in, in, vec_vsx_ld (0, (unsigned char*)0));
+ vecu32 y = vec_vsx_ld (0, (unsigned int*)0);
+ return vec_cipher_be (t, in) ^ (block)y;
+ }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gcry_cv_cc_ppc_altivec_cflags=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_cc_ppc_altivec_cflags" >&5
+printf "%s\n" "$gcry_cv_cc_ppc_altivec_cflags" >&6; }
+ if test "$gcry_cv_cc_ppc_altivec_cflags" = "yes" ; then
+
+printf "%s\n" "#define HAVE_COMPATIBLE_CC_PPC_ALTIVEC 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_COMPATIBLE_CC_PPC_ALTIVEC_WITH_CFLAGS 1" >>confdefs.h
+
+ fi
+fi
+
+ if test "$gcry_cv_cc_ppc_altivec_cflags" = "yes"; then
+ ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_TRUE=
+ ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_FALSE='#'
+else
+ ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_TRUE='#'
+ ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_FALSE=
+fi
+
+
+# Restore flags.
+CFLAGS=$_gcc_cflags_save;
+
+
+#
+# Check whether GCC inline assembler supports PowerPC AltiVec/VSX/crypto instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports PowerPC AltiVec/VSX/crypto instructions" >&5
+printf %s "checking whether GCC inline assembler supports PowerPC AltiVec/VSX/crypto instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_ppc_altivec+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "ppc" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_ppc_altivec="n/a"
+ else
+ gcry_cv_gcc_inline_asm_ppc_altivec=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(".globl testfn;\n"
+ ".text\n\t"
+ "testfn:\n"
+ "stvx %v31,%r12,%r0;\n"
+ "lvx %v20,%r12,%r0;\n"
+ "vcipher %v0, %v1, %v22;\n"
+ "lxvw4x %vs32, %r0, %r1;\n"
+ "vadduwm %v0, %v1, %v22;\n"
+ "vshasigmaw %v0, %v1, 0, 15;\n"
+ "vshasigmad %v0, %v1, 0, 15;\n"
+ "vpmsumd %v11, %v11, %v11;\n"
+ );
+ void testfn(void);
+
+int
+main (void)
+{
+ testfn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_ppc_altivec=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_ppc_altivec" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_ppc_altivec" >&6; }
+if test "$gcry_cv_gcc_inline_asm_ppc_altivec" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_PPC_ALTIVEC 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports PowerISA 3.00 instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports PowerISA 3.00 instructions" >&5
+printf %s "checking whether GCC inline assembler supports PowerISA 3.00 instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_ppc_arch_3_00+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "ppc" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_ppc_arch_3_00="n/a"
+ else
+ gcry_cv_gcc_inline_asm_ppc_arch_3_00=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+__asm__(".text\n\t"
+ ".globl testfn;\n"
+ "testfn:\n"
+ "stxvb16x %r1,%v12,%v30;\n"
+ );
+ void testfn(void);
+
+int
+main (void)
+{
+ testfn();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_ppc_arch_3_00=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_ppc_arch_3_00" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_ppc_arch_3_00" >&6; }
+if test "$gcry_cv_gcc_inline_asm_ppc_arch_3_00" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_PPC_ARCH_3_00 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports zSeries instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports zSeries instructions" >&5
+printf %s "checking whether GCC inline assembler supports zSeries instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_s390x+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "s390x" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_s390x="n/a"
+ else
+ gcry_cv_gcc_inline_asm_s390x=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef unsigned int u128_t __attribute__ ((mode (TI)));
+ unsigned int testfunc(unsigned int x, void *y, unsigned int z)
+ {
+ unsigned long fac[8];
+ register unsigned long reg0 asm("0") = 0;
+ register unsigned long reg1 asm("1") = x;
+ u128_t r1 = ((u128_t)(unsigned long)y << 64) | (unsigned long)z;
+ u128_t r2 = 0;
+ u128_t r3 = 0;
+ asm volatile (".insn rre,0xb92e << 16, %[r1], %[r2]\n\t"
+ : [r1] "+a" (r1), [r2] "+a" (r2)
+ : "r" (reg0), "r" (reg1)
+ : "cc", "memory");
+ asm volatile (".insn rrf,0xb929 << 16, %[r1], %[r2], %[r3], 0\n\t"
+ : [r1] "+a" (r1), [r2] "+a" (r2), [r3] "+a" (r3)
+ : "r" (reg0), "r" (reg1)
+ : "cc", "memory");
+ reg0 = 8 - 1;
+ asm ("stfle %1\n\t"
+ : "+d" (reg0), "=Q" (fac[0])
+ :
+ : "cc", "memory");
+ asm volatile ("mvc 0(16, %0), 0(%1)\n\t"
+ :
+ : "a" (y), "a" (fac)
+ : "memory");
+ asm volatile ("xc 0(16, %0), 0(%0)\n\t"
+ :
+ : "a" (fac)
+ : "memory");
+ asm volatile ("risbgn %%r11, %%r11, 0, 129, 0\n\t"
+ :
+ :
+ : "memory", "r11");
+ asm volatile ("algrk %%r14, %%r14, %%r14\n\t"
+ :
+ :
+ : "memory", "r14");
+ return (unsigned int)r1 ^ reg0;
+ }
+
+int
+main (void)
+{
+ testfunc(0, 0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_s390x=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_s390x" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_s390x" >&6; }
+if test "$gcry_cv_gcc_inline_asm_s390x" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_S390X 1" >>confdefs.h
+
+fi
+
+
+#
+# Check whether GCC inline assembler supports zSeries vector instructions
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GCC inline assembler supports zSeries vector instructions" >&5
+printf %s "checking whether GCC inline assembler supports zSeries vector instructions... " >&6; }
+if test ${gcry_cv_gcc_inline_asm_s390x_vx+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$mpi_cpu_arch" != "s390x" ||
+ test "$try_asm_modules" != "yes" ; then
+ gcry_cv_gcc_inline_asm_s390x_vx="n/a"
+ else
+ gcry_cv_gcc_inline_asm_s390x_vx=no
+ if test "$gcry_cv_gcc_inline_asm_s390x" = "yes" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void testfunc(void)
+ {
+ asm volatile (".machine \"z13+vx\"\n\t"
+ "vx %%v0, %%v1, %%v31\n\t"
+ "verllf %%v11, %%v11, (16)(0)\n\t"
+ :
+ :
+ : "memory");
+ }
+
+int
+main (void)
+{
+ testfunc();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gcry_cv_gcc_inline_asm_s390x_vx=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gcry_cv_gcc_inline_asm_s390x_vx" >&5
+printf "%s\n" "$gcry_cv_gcc_inline_asm_s390x_vx" >&6; }
+if test "$gcry_cv_gcc_inline_asm_s390x_vx" = "yes" ; then
+
+printf "%s\n" "#define HAVE_GCC_INLINE_ASM_S390X_VX 1" >>confdefs.h
+
+fi
+
+
+#######################################
+#### Checks for library functions. ####
+#######################################
+
+ac_func=
+for ac_item in $ac_func_c_list
+do
+ if test $ac_func; then
+ ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func
+ if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then
+ echo "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_func=
+ else
+ ac_func=$ac_item
+ fi
+done
+
+if test "x$ac_cv_func_vprintf" = xno
+then :
+ ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = xyes
+then :
+
+printf "%s\n" "#define HAVE_DOPRNT 1" >>confdefs.h
+
+fi
+
+fi
+# We have replacements for these in src/missing-string.c
+ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy"
+if test "x$ac_cv_func_stpcpy" = xyes
+then :
+ printf "%s\n" "#define HAVE_STPCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
+if test "x$ac_cv_func_strcasecmp" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h
+
+fi
+
+# We have replacements for these in src/g10lib.h
+ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul"
+if test "x$ac_cv_func_strtoul" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
+if test "x$ac_cv_func_memmove" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "stricmp" "ac_cv_func_stricmp"
+if test "x$ac_cv_func_stricmp" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRICMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "atexit" "ac_cv_func_atexit"
+if test "x$ac_cv_func_atexit" = xyes
+then :
+ printf "%s\n" "#define HAVE_ATEXIT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise"
+if test "x$ac_cv_func_raise" = xyes
+then :
+ printf "%s\n" "#define HAVE_RAISE 1" >>confdefs.h
+
+fi
+
+# Other checks
+ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
+if test "x$ac_cv_func_strerror" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "rand" "ac_cv_func_rand"
+if test "x$ac_cv_func_rand" = xyes
+then :
+ printf "%s\n" "#define HAVE_RAND 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = xyes
+then :
+ printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
+if test "x$ac_cv_func_getpagesize" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf"
+if test "x$ac_cv_func_sysconf" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid"
+if test "x$ac_cv_func_waitpid" = xyes
+then :
+ printf "%s\n" "#define HAVE_WAITPID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "wait4" "ac_cv_func_wait4"
+if test "x$ac_cv_func_wait4" = xyes
+then :
+ printf "%s\n" "#define HAVE_WAIT4 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage"
+if test "x$ac_cv_func_getrusage" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETRUSAGE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gethrtime" "ac_cv_func_gethrtime"
+if test "x$ac_cv_func_gethrtime" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETHRTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
+if test "x$ac_cv_func_clock_gettime" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog"
+if test "x$ac_cv_func_syslog" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYSLOG 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "syscall" "ac_cv_func_syscall"
+if test "x$ac_cv_func_syscall" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYSCALL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl"
+if test "x$ac_cv_func_fcntl" = xyes
+then :
+ printf "%s\n" "#define HAVE_FCNTL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate"
+if test "x$ac_cv_func_ftruncate" = xyes
+then :
+ printf "%s\n" "#define HAVE_FTRUNCATE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "flockfile" "ac_cv_func_flockfile"
+if test "x$ac_cv_func_flockfile" = xyes
+then :
+ printf "%s\n" "#define HAVE_FLOCKFILE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getauxval" "ac_cv_func_getauxval"
+if test "x$ac_cv_func_getauxval" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETAUXVAL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "elf_aux_info" "ac_cv_func_elf_aux_info"
+if test "x$ac_cv_func_elf_aux_info" = xyes
+then :
+ printf "%s\n" "#define HAVE_ELF_AUX_INFO 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero"
+if test "x$ac_cv_func_explicit_bzero" = xyes
+then :
+ printf "%s\n" "#define HAVE_EXPLICIT_BZERO 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "explicit_memset" "ac_cv_func_explicit_memset"
+if test "x$ac_cv_func_explicit_memset" = xyes
+then :
+ printf "%s\n" "#define HAVE_EXPLICIT_MEMSET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy"
+if test "x$ac_cv_func_getentropy" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h
+
+fi
+
+
+ ac_fn_c_check_func "$LINENO" "mlock" "ac_cv_func_mlock"
+if test "x$ac_cv_func_mlock" = xyes
+then :
+ printf "%s\n" "#define HAVE_MLOCK 1" >>confdefs.h
+
+fi
+
+ if test "$ac_cv_func_mlock" = "no"; then
+ ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mman_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h
+
+fi
+
+ if test "$ac_cv_header_sys_mman_h" = "yes"; then
+ # Add librt to LIBS:
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for memlk in -lrt" >&5
+printf %s "checking for memlk in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_memlk+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char memlk ();
+int
+main (void)
+{
+return memlk ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_rt_memlk=yes
+else $as_nop
+ ac_cv_lib_rt_memlk=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_memlk" >&5
+printf "%s\n" "$ac_cv_lib_rt_memlk" >&6; }
+if test "x$ac_cv_lib_rt_memlk" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBRT 1" >>confdefs.h
+
+ LIBS="-lrt $LIBS"
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mlock is in sys/mman.h" >&5
+printf %s "checking whether mlock is in sys/mman.h... " >&6; }
+if test ${gnupg_cv_mlock_is_in_sys_mman+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <assert.h>
+ #ifdef HAVE_SYS_MMAN_H
+ #include <sys/mman.h>
+ #endif
+
+int
+main (void)
+{
+
+int i;
+
+/* glibc defines this for functions which it implements
+ * to always fail with ENOSYS. Some functions are actually
+ * named something starting with __ and the normal name
+ * is an alias. */
+#if defined (__stub_mlock) || defined (__stub___mlock)
+choke me
+#else
+mlock(&i, 4);
+#endif
+; return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gnupg_cv_mlock_is_in_sys_mman=yes
+else $as_nop
+ gnupg_cv_mlock_is_in_sys_mman=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_mlock_is_in_sys_mman" >&5
+printf "%s\n" "$gnupg_cv_mlock_is_in_sys_mman" >&6; }
+ if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then
+
+printf "%s\n" "#define HAVE_MLOCK 1" >>confdefs.h
+
+ fi
+ fi
+ fi
+ if test "$ac_cv_func_mlock" = "yes"; then
+ ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf"
+if test "x$ac_cv_func_sysconf" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
+if test "x$ac_cv_func_getpagesize" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mlock is broken" >&5
+printf %s "checking whether mlock is broken... " >&6; }
+ if test ${gnupg_cv_have_broken_mlock+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ gnupg_cv_have_broken_mlock="assume-no"
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+int main()
+{
+ char *pool;
+ int err;
+ long int pgsize;
+
+#if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
+ pgsize = sysconf (_SC_PAGESIZE);
+#elif defined (HAVE_GETPAGESIZE)
+ pgsize = getpagesize();
+#else
+ pgsize = -1;
+#endif
+
+ if (pgsize == -1)
+ pgsize = 4096;
+
+ pool = malloc( 4096 + pgsize );
+ if( !pool )
+ return 2;
+ pool += (pgsize - ((size_t)pool % pgsize));
+
+ err = mlock( pool, 4096 );
+ if( !err || errno == EPERM || errno == EAGAIN)
+ return 0; /* okay */
+
+ return 1; /* hmmm */
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gnupg_cv_have_broken_mlock="no"
+else $as_nop
+ gnupg_cv_have_broken_mlock="yes"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+
+ if test "$gnupg_cv_have_broken_mlock" = "yes"; then
+
+printf "%s\n" "#define HAVE_BROKEN_MLOCK 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ if test "$gnupg_cv_have_broken_mlock" = "no"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: assuming no" >&5
+printf "%s\n" "assuming no" >&6; }
+ fi
+ fi
+ fi
+
+
+#
+# Replacement functions.
+#
+ac_fn_c_check_func "$LINENO" "getpid" "ac_cv_func_getpid"
+if test "x$ac_cv_func_getpid" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETPID 1" >>confdefs.h
+
+else $as_nop
+ case " $LIBOBJS " in
+ *" getpid.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS getpid.$ac_objext"
+ ;;
+esac
+
+fi
+ac_fn_c_check_func "$LINENO" "clock" "ac_cv_func_clock"
+if test "x$ac_cv_func_clock" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK 1" >>confdefs.h
+
+else $as_nop
+ case " $LIBOBJS " in
+ *" clock.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS clock.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+
+#
+# Check whether it is necessary to link against libdl.
+#
+DL_LIBS=""
+if test "$use_hmac_binary_check" != no ; then
+ _gcry_save_libs="$LIBS"
+ LIBS=""
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+printf %s "checking for library containing dlopen... " >&6; }
+if test ${ac_cv_search_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' c dl
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_dlopen=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_dlopen+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_dlopen+y}
+then :
+
+else $as_nop
+ ac_cv_search_dlopen=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+printf "%s\n" "$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ DL_LIBS=$LIBS
+ LIBS="$_gcry_save_libs"
+fi
+
+
+
+#
+# Check whether we can use Linux capabilities as requested.
+#
+if test "$use_capabilities" = "yes" ; then
+use_capabilities=no
+ac_fn_c_check_header_compile "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_capability_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_CAPABILITY_H 1" >>confdefs.h
+
+fi
+
+if test "$ac_cv_header_sys_capability_h" = "yes" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cap_init in -lcap" >&5
+printf %s "checking for cap_init in -lcap... " >&6; }
+if test ${ac_cv_lib_cap_cap_init+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcap $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char cap_init ();
+int
+main (void)
+{
+return cap_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_cap_cap_init=yes
+else $as_nop
+ ac_cv_lib_cap_cap_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_cap_init" >&5
+printf "%s\n" "$ac_cv_lib_cap_cap_init" >&6; }
+if test "x$ac_cv_lib_cap_cap_init" = xyes
+then :
+ ac_need_libcap=1
+fi
+
+ if test "$ac_cv_lib_cap_cap_init" = "yes"; then
+
+printf "%s\n" "#define USE_CAPABILITIES 1" >>confdefs.h
+
+ LIBS="$LIBS -lcap"
+ use_capabilities=yes
+ fi
+fi
+if test "$use_capabilities" = "no" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING:
+***
+*** The use of capabilities on this system is not possible.
+*** You need a recent Linux kernel and some patches:
+*** fcaps-2.2.9-990610.patch (kernel patch for 2.2.9)
+*** fcap-module-990613.tar.gz (kernel module)
+*** libcap-1.92.tar.gz (user mode library and utilities)
+*** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
+*** set (filesystems menu). Be warned: This code is *really* ALPHA.
+***" >&5
+printf "%s\n" "$as_me: WARNING:
+***
+*** The use of capabilities on this system is not possible.
+*** You need a recent Linux kernel and some patches:
+*** fcaps-2.2.9-990610.patch (kernel patch for 2.2.9)
+*** fcap-module-990613.tar.gz (kernel module)
+*** libcap-1.92.tar.gz (user mode library and utilities)
+*** And you have to configure the kernel with CONFIG_VFS_CAP_PLUGIN
+*** set (filesystems menu). Be warned: This code is *really* ALPHA.
+***" >&2;}
+fi
+fi
+
+# Check whether a random device is available.
+if test "$try_dev_random" = yes ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for random device" >&5
+printf %s "checking for random device... " >&6; }
+if test ${ac_cv_have_dev_random+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then
+ ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_dev_random" >&5
+printf "%s\n" "$ac_cv_have_dev_random" >&6; }
+ if test "$ac_cv_have_dev_random" = yes; then
+
+printf "%s\n" "#define HAVE_DEV_RANDOM 1" >>confdefs.h
+
+ fi
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for random device" >&5
+printf %s "checking for random device... " >&6; }
+ ac_cv_have_dev_random=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: has been disabled" >&5
+printf "%s\n" "has been disabled" >&6; }
+fi
+
+# Figure out the random modules for this configuration.
+if test "$random" = "default"; then
+
+ # Select default value.
+ if test "$ac_cv_func_getentropy" = yes; then
+ random_modules="getentropy"
+ elif test "$ac_cv_have_dev_random" = yes; then
+ # Try Linuxish random device.
+ random_modules="linux"
+ else
+ case "${host}" in
+ *-*-mingw32ce*)
+ # WindowsCE random device.
+ random_modules="w32ce"
+ ;;
+ *-*-mingw32*|*-*-cygwin*)
+ # Windows random device.
+ random_modules="w32"
+ ;;
+ *)
+ # Build everything, allow to select at runtime.
+ random_modules="$auto_random_modules"
+ ;;
+ esac
+ fi
+else
+ if test "$random" = "auto"; then
+ # Build everything, allow to select at runtime.
+ random_modules="$auto_random_modules"
+ else
+ random_modules="$random"
+ fi
+fi
+
+
+#
+# Other defines
+#
+if test mym4_isgit = "yes"; then
+
+printf "%s\n" "#define IS_DEVELOPMENT_VERSION 1" >>confdefs.h
+
+fi
+
+
+ if test x$cross_compiling = xyes; then
+ CROSS_COMPILING_TRUE=
+ CROSS_COMPILING_FALSE='#'
+else
+ CROSS_COMPILING_TRUE='#'
+ CROSS_COMPILING_FALSE=
+fi
+
+
+
+# This is handy for debugging so the compiler doesn't rearrange
+# things and eliminate variables.
+# Check whether --enable-optimization was given.
+if test ${enable_optimization+y}
+then :
+ enableval=$enable_optimization; if test $enableval = no ; then
+ CFLAGS=`echo $CFLAGS | sed 's/-O[0-9]//'`
+ fi
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cc features" >&5
+printf "%s\n" "$as_me: checking for cc features" >&6;}
+# CFLAGS mangling when using gcc.
+if test "$GCC" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -fno-delete-null-pointer-checks" >&5
+printf %s "checking if gcc supports -fno-delete-null-pointer-checks... " >&6; }
+ _gcc_cflags_save=$CFLAGS
+ CFLAGS="-fno-delete-null-pointer-checks"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ _gcc_wopt=yes
+else $as_nop
+ _gcc_wopt=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_gcc_wopt" >&5
+printf "%s\n" "$_gcc_wopt" >&6; }
+ CFLAGS=$_gcc_cflags_save;
+ if test x"$_gcc_wopt" = xyes ; then
+ CFLAGS="$CFLAGS -fno-delete-null-pointer-checks"
+ fi
+
+ CFLAGS="$CFLAGS -Wall"
+ if test "$USE_MAINTAINER_MODE" = "yes"; then
+ CFLAGS="$CFLAGS -Wcast-align -Wshadow -Wstrict-prototypes"
+ CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
+
+ # If -Wno-missing-field-initializers is supported we can enable a
+ # a bunch of really useful warnings.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wno-missing-field-initializers" >&5
+printf %s "checking if gcc supports -Wno-missing-field-initializers... " >&6; }
+ _gcc_cflags_save=$CFLAGS
+ CFLAGS="-Wno-missing-field-initializers"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ _gcc_wopt=yes
+else $as_nop
+ _gcc_wopt=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_gcc_wopt" >&5
+printf "%s\n" "$_gcc_wopt" >&6; }
+ CFLAGS=$_gcc_cflags_save;
+ if test x"$_gcc_wopt" = xyes ; then
+ CFLAGS="$CFLAGS -W -Wextra -Wbad-function-cast"
+ CFLAGS="$CFLAGS -Wwrite-strings"
+ CFLAGS="$CFLAGS -Wdeclaration-after-statement"
+ CFLAGS="$CFLAGS -Wno-missing-field-initializers"
+ CFLAGS="$CFLAGS -Wno-sign-compare"
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wpointer-arith" >&5
+printf %s "checking if gcc supports -Wpointer-arith... " >&6; }
+ _gcc_cflags_save=$CFLAGS
+ CFLAGS="-Wpointer-arith"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ _gcc_wopt=yes
+else $as_nop
+ _gcc_wopt=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_gcc_wopt" >&5
+printf "%s\n" "$_gcc_wopt" >&6; }
+ CFLAGS=$_gcc_cflags_save;
+ if test x"$_gcc_wopt" = xyes ; then
+ CFLAGS="$CFLAGS -Wpointer-arith"
+ fi
+ fi
+fi
+
+# Check whether as(1) supports a noeexecstack feature. This test
+# includes an override option.
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether non excutable stack support is requested" >&5
+printf %s "checking whether non excutable stack support is requested... " >&6; }
+# Check whether --enable-noexecstack was given.
+if test ${enable_noexecstack+y}
+then :
+ enableval=$enable_noexecstack; noexecstack_support=$enableval
+else $as_nop
+ noexecstack_support=yes
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $noexecstack_support" >&5
+printf "%s\n" "$noexecstack_support" >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether assembler supports --noexecstack option" >&5
+printf %s "checking whether assembler supports --noexecstack option... " >&6; }
+if test ${cl_cv_as_noexecstack+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat > conftest.c <<EOF
+void foo(void) {}
+EOF
+ if { ac_try='${CC} $CFLAGS $CPPFLAGS
+ -S -o conftest.s conftest.c >/dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } \
+ && grep .note.GNU-stack conftest.s >/dev/null \
+ && { ac_try='${CCAS} $CCASFLAGS $CPPFLAGS -Wa,--noexecstack
+ -c -o conftest.o conftest.s >/dev/null'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+ then
+ cl_cv_as_noexecstack=yes
+ else
+ cl_cv_as_noexecstack=no
+ fi
+ rm -f conftest*
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cl_cv_as_noexecstack" >&5
+printf "%s\n" "$cl_cv_as_noexecstack" >&6; }
+ if test "$noexecstack_support" = yes -a "$cl_cv_as_noexecstack" = yes; then
+ NOEXECSTACK_FLAGS="-Wa,--noexecstack"
+ else
+ NOEXECSTACK_FLAGS=
+ fi
+
+
+
+
+
+
+
+
+
+
+ac_config_commands="$ac_config_commands gcrypt-conf"
+
+
+#####################
+#### Conclusion. ####
+#####################
+
+# Check that requested feature can actually be used and define
+# ENABLE_foo_SUPPORT macros.
+
+if test x"$aesnisupport" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_ssse3" != "yes" ; then
+ aesnisupport="no (unsupported by compiler)"
+ fi
+fi
+if test x"$shaextsupport" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_shaext" != "yes" ; then
+ shaextsupport="no (unsupported by compiler)"
+ fi
+fi
+if test x"$pclmulsupport" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_pclmul" != "yes" ; then
+ pclmulsupport="no (unsupported by compiler)"
+ fi
+fi
+if test x"$sse41support" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_sse41" != "yes" ; then
+ sse41support="no (unsupported by compiler)"
+ fi
+fi
+if test x"$avxsupport" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_avx" != "yes" ; then
+ avxsupport="no (unsupported by compiler)"
+ fi
+fi
+if test x"$avx2support" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_avx2" != "yes" ; then
+ avx2support="no (unsupported by compiler)"
+ fi
+fi
+if test x"$neonsupport" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_neon" != "yes" ; then
+ if test "$gcry_cv_gcc_inline_asm_aarch64_neon" != "yes" ; then
+ neonsupport="no (unsupported by compiler)"
+ fi
+ fi
+fi
+if test x"$armcryptosupport" = xyes ; then
+ if test "$gcry_cv_gcc_inline_asm_aarch32_crypto" != "yes" ; then
+ if test "$gcry_cv_gcc_inline_asm_aarch64_crypto" != "yes" ; then
+ neonsupport="no (unsupported by compiler)"
+ fi
+ fi
+fi
+
+if test x"$aesnisupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_AESNI_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$shaextsupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_SHAEXT_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$pclmulsupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_PCLMUL_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$sse41support" = xyes ; then
+
+printf "%s\n" "#define ENABLE_SSE41_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$avxsupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_AVX_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$avx2support" = xyes ; then
+
+printf "%s\n" "#define ENABLE_AVX2_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$neonsupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_NEON_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$armcryptosupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_ARM_CRYPTO_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$ppccryptosupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_PPC_CRYPTO_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$jentsupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_JENT_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$padlocksupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_PADLOCK_SUPPORT 1" >>confdefs.h
+
+fi
+if test x"$drngsupport" = xyes ; then
+
+printf "%s\n" "#define ENABLE_DRNG_SUPPORT 1" >>confdefs.h
+
+fi
+
+
+if test x"$force_soft_hwfeatures" = xyes ; then
+
+printf "%s\n" "#define ENABLE_FORCE_SOFT_HWFEATURES 1" >>confdefs.h
+
+fi
+
+# Define conditional sources and config.h symbols depending on the
+# selected ciphers, pubkey-ciphers, digests, kdfs, and random modules.
+
+
+name=arcfour
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1"; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS arcfour.lo"
+
+printf "%s\n" "#define USE_ARCFOUR 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS arcfour-amd64.lo"
+ ;;
+ esac
+fi
+
+
+name=blowfish
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS blowfish.lo"
+
+printf "%s\n" "#define USE_BLOWFISH 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS blowfish-amd64.lo"
+ ;;
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS blowfish-arm.lo"
+ ;;
+ esac
+fi
+
+
+name=cast5
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS cast5.lo"
+
+printf "%s\n" "#define USE_CAST5 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS cast5-amd64.lo"
+ ;;
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS cast5-arm.lo"
+ ;;
+ esac
+fi
+
+
+name=des
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS des.lo"
+
+printf "%s\n" "#define USE_DES 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS des-amd64.lo"
+ ;;
+ esac
+fi
+
+
+name=aes
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS rijndael.lo"
+
+printf "%s\n" "#define USE_AES 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-amd64.lo"
+
+ # Build with the SSSE3 implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-ssse3-amd64.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-ssse3-amd64-asm.lo"
+
+ # Build with the VAES/AVX2 implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-vaes.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-vaes-avx2-amd64.lo"
+ ;;
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-arm.lo"
+
+ # Build with the ARMv8/AArch32 CE implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-armv8-ce.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-armv8-aarch32-ce.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-aarch64.lo"
+
+ # Build with the ARMv8/AArch64 CE implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-armv8-ce.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-armv8-aarch64-ce.lo"
+ ;;
+ powerpc64le-*-*)
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-ppc.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-ppc9le.lo"
+
+ if test "$gcry_cv_gcc_inline_asm_ppc_altivec" = "yes" &&
+ test "$gcry_cv_gcc_inline_asm_ppc_arch_3_00" = "yes" ; then
+ # Build with AES-GCM bulk implementation for P10
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-gcm-p10le.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-p10le.lo"
+ fi
+ ;;
+ powerpc64-*-*)
+ # Big-Endian.
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-ppc.lo"
+ ;;
+ powerpc-*-*)
+ # Big-Endian.
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-ppc.lo"
+ ;;
+ s390x-*-*)
+ # Big-Endian.
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-s390x.lo"
+ ;;
+ esac
+
+ case "$mpi_cpu_arch" in
+ x86)
+ # Build with the AES-NI implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-aesni.lo"
+
+ # Build with the Padlock implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS rijndael-padlock.lo"
+ ;;
+ esac
+fi
+
+
+name=twofish
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS twofish.lo"
+
+printf "%s\n" "#define USE_TWOFISH 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS twofish-amd64.lo"
+
+ if test x"$avx2support" = xyes ; then
+ # Build with the AVX2 implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS twofish-avx2-amd64.lo"
+ fi
+ ;;
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS twofish-arm.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS twofish-aarch64.lo"
+ ;;
+ esac
+fi
+
+
+name=serpent
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS serpent.lo"
+
+printf "%s\n" "#define USE_SERPENT 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the SSE2 implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS serpent-sse2-amd64.lo"
+ ;;
+ esac
+
+ if test x"$avx2support" = xyes ; then
+ # Build with the AVX2 implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS serpent-avx2-amd64.lo"
+ fi
+
+ if test x"$neonsupport" = xyes ; then
+ # Build with the NEON implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS serpent-armv7-neon.lo"
+ fi
+fi
+
+
+name=rfc2268
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS rfc2268.lo"
+
+printf "%s\n" "#define USE_RFC2268 1" >>confdefs.h
+
+fi
+
+
+name=seed
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS seed.lo"
+
+printf "%s\n" "#define USE_SEED 1" >>confdefs.h
+
+fi
+
+
+name=camellia
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS camellia.lo camellia-glue.lo"
+
+printf "%s\n" "#define USE_CAMELLIA 1" >>confdefs.h
+
+
+ case "${host}" in
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS camellia-arm.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS camellia-aarch64.lo"
+ ;;
+ esac
+
+ if test x"$avxsupport" = xyes ; then
+ if test x"$aesnisupport" = xyes ; then
+ # Build with the AES-NI/AVX implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS camellia-aesni-avx-amd64.lo"
+ fi
+ fi
+
+ if test x"$avx2support" = xyes ; then
+ if test x"$aesnisupport" = xyes ; then
+ # Build with the AES-NI/AVX2 implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS camellia-aesni-avx2-amd64.lo"
+
+ # Build with the VAES/AVX2 implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS camellia-vaes-avx2-amd64.lo"
+ fi
+ fi
+fi
+
+
+name=idea
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS idea.lo"
+
+printf "%s\n" "#define USE_IDEA 1" >>confdefs.h
+
+fi
+
+
+name=salsa20
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS salsa20.lo"
+
+printf "%s\n" "#define USE_SALSA20 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS salsa20-amd64.lo"
+ ;;
+ esac
+
+ if test x"$neonsupport" = xyes ; then
+ # Build with the NEON implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS salsa20-armv7-neon.lo"
+ fi
+fi
+
+
+name=gost28147
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS gost28147.lo"
+
+printf "%s\n" "#define USE_GOST28147 1" >>confdefs.h
+
+fi
+
+
+name=chacha20
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS chacha20.lo"
+
+printf "%s\n" "#define USE_CHACHA20 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-amd64-ssse3.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-amd64-avx2.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-aarch64.lo"
+ ;;
+ powerpc64le-*-*)
+ # Build with the ppc8 vector implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-ppc.lo"
+ ;;
+ powerpc64-*-*)
+ # Build with the ppc8 vector implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-ppc.lo"
+ ;;
+ powerpc-*-*)
+ # Build with the ppc8 vector implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-ppc.lo"
+ ;;
+ s390x-*-*)
+ # Build with the s390x/zSeries vector implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-s390x.lo"
+ ;;
+ esac
+
+ if test x"$neonsupport" = xyes ; then
+ # Build with the NEON implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS chacha20-armv7-neon.lo"
+ fi
+fi
+
+
+name=sm4
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS sm4.lo"
+
+printf "%s\n" "#define USE_SM4 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS sm4-aesni-avx-amd64.lo"
+ GCRYPT_ASM_CIPHERS="$GCRYPT_ASM_CIPHERS sm4-aesni-avx2-amd64.lo"
+ ;;
+ esac
+fi
+
+
+name=dsa
+list=$enabled_pubkey_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "1"; then
+ USE_DSA_TRUE=
+ USE_DSA_FALSE='#'
+else
+ USE_DSA_TRUE='#'
+ USE_DSA_FALSE=
+fi
+
+if test "$found" = "1" ; then
+ GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
+
+printf "%s\n" "#define USE_DSA 1" >>confdefs.h
+
+fi
+
+
+name=rsa
+list=$enabled_pubkey_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "1"; then
+ USE_RSA_TRUE=
+ USE_RSA_FALSE='#'
+else
+ USE_RSA_TRUE='#'
+ USE_RSA_FALSE=
+fi
+
+if test "$found" = "1" ; then
+ GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
+
+printf "%s\n" "#define USE_RSA 1" >>confdefs.h
+
+fi
+
+
+name=elgamal
+list=$enabled_pubkey_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "1"; then
+ USE_ELGAMAL_TRUE=
+ USE_ELGAMAL_FALSE='#'
+else
+ USE_ELGAMAL_TRUE='#'
+ USE_ELGAMAL_FALSE=
+fi
+
+if test "$found" = "1" ; then
+ GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
+
+printf "%s\n" "#define USE_ELGAMAL 1" >>confdefs.h
+
+fi
+
+
+name=ecc
+list=$enabled_pubkey_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "1"; then
+ USE_ECC_TRUE=
+ USE_ECC_FALSE='#'
+else
+ USE_ECC_TRUE='#'
+ USE_ECC_FALSE=
+fi
+
+if test "$found" = "1" ; then
+ GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS \
+ ecc.lo ecc-curves.lo ecc-misc.lo \
+ ecc-ecdh.lo ecc-ecdsa.lo ecc-eddsa.lo ecc-gost.lo \
+ ecc-sm2.lo"
+
+printf "%s\n" "#define USE_ECC 1" >>confdefs.h
+
+fi
+
+
+name=crc
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS crc.lo"
+
+printf "%s\n" "#define USE_CRC 1" >>confdefs.h
+
+
+ case "${host}" in
+ i?86-*-* | x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS crc-intel-pclmul.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS crc-armv8-ce.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS crc-armv8-aarch64-ce.lo"
+ ;;
+ powerpc64le-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS crc-ppc.lo"
+ ;;
+ powerpc64-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS crc-ppc.lo"
+ ;;
+ powerpc-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS crc-ppc.lo"
+ ;;
+ esac
+fi
+
+
+name=gostr3411-94
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ # GOST R 34.11-94 internally uses GOST 28147-89
+
+name=gost28147
+list=$enabled_ciphers
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+ if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS gostr3411-94.lo"
+
+printf "%s\n" "#define USE_GOST_R_3411_94 1" >>confdefs.h
+
+ fi
+fi
+
+
+name=stribog
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS stribog.lo"
+
+printf "%s\n" "#define USE_GOST_R_3411_12 1" >>confdefs.h
+
+fi
+
+
+name=md2
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS md2.lo"
+
+printf "%s\n" "#define USE_MD2 1" >>confdefs.h
+
+fi
+
+
+name=md4
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS md4.lo"
+
+printf "%s\n" "#define USE_MD4 1" >>confdefs.h
+
+fi
+
+
+name=md5
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS md5.lo"
+
+printf "%s\n" "#define USE_MD5 1" >>confdefs.h
+
+fi
+
+
+name=rmd160
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS rmd160.lo"
+
+printf "%s\n" "#define USE_RMD160 1" >>confdefs.h
+
+fi
+
+
+name=sha256
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha256.lo"
+
+printf "%s\n" "#define USE_SHA256 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-ssse3-amd64.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-avx-amd64.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-avx2-bmi2-amd64.lo"
+ ;;
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-armv8-aarch32-ce.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-armv8-aarch64-ce.lo"
+ ;;
+ powerpc64le-*-*)
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-ppc.lo"
+ ;;
+ powerpc64-*-*)
+ # Big-Endian.
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-ppc.lo"
+ ;;
+ powerpc-*-*)
+ # Big-Endian.
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-ppc.lo"
+ esac
+
+ case "$mpi_cpu_arch" in
+ x86)
+ # Build with the SHAEXT implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha256-intel-shaext.lo"
+ ;;
+ esac
+fi
+
+
+name=sha512
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha512.lo"
+
+printf "%s\n" "#define USE_SHA512 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-ssse3-amd64.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-avx-amd64.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-avx2-bmi2-amd64.lo"
+ ;;
+ i?86-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-ssse3-i386.lo"
+ ;;
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-arm.lo"
+ ;;
+ powerpc64le-*-*)
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-ppc.lo"
+ ;;
+ powerpc64-*-*)
+ # Big-Endian.
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-ppc.lo"
+ ;;
+ powerpc-*-*)
+ # Big-Endian.
+ # Build with the crypto extension implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-ppc.lo"
+ esac
+
+ if test x"$neonsupport" = xyes ; then
+ # Build with the NEON implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha512-armv7-neon.lo"
+ fi
+fi
+
+
+name=sha3
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS keccak.lo"
+
+printf "%s\n" "#define USE_SHA3 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ :
+ ;;
+ esac
+
+ if test x"$neonsupport" = xyes ; then
+ # Build with the NEON implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS keccak-armv7-neon.lo"
+ fi
+fi
+
+
+name=tiger
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS tiger.lo"
+
+printf "%s\n" "#define USE_TIGER 1" >>confdefs.h
+
+fi
+
+
+name=whirlpool
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS whirlpool.lo"
+
+printf "%s\n" "#define USE_WHIRLPOOL 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS whirlpool-sse2-amd64.lo"
+ ;;
+ esac
+fi
+
+
+name=blake2
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS blake2.lo"
+
+printf "%s\n" "#define USE_BLAKE2 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS blake2b-amd64-avx2.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS blake2s-amd64-avx.lo"
+ ;;
+ esac
+fi
+
+
+name=sm3
+list=$enabled_digests
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS sm3.lo"
+
+printf "%s\n" "#define USE_SM3 1" >>confdefs.h
+
+
+ case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sm3-avx-bmi2-amd64.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sm3-aarch64.lo"
+ ;;
+ esac
+fi
+
+# SHA-1 needs to be included always for example because it is used by
+# random-csprng.c.
+GCRYPT_DIGESTS="$GCRYPT_DIGESTS sha1.lo"
+
+printf "%s\n" "#define USE_SHA1 1" >>confdefs.h
+
+
+case "${host}" in
+ x86_64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-ssse3-amd64.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-avx-amd64.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-avx-bmi2-amd64.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-avx2-bmi2-amd64.lo"
+ ;;
+ arm*-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-armv7-neon.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-armv8-aarch32-ce.lo"
+ ;;
+ aarch64-*-*)
+ # Build with the assembly implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-armv8-aarch64-ce.lo"
+ ;;
+esac
+
+case "$mpi_cpu_arch" in
+ x86)
+ # Build with the SHAEXT implementation
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS sha1-intel-shaext.lo"
+ ;;
+esac
+
+# Arch specific GCM implementations
+case "${host}" in
+ i?86-*-* | x86_64-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS cipher-gcm-intel-pclmul.lo"
+ ;;
+ arm*-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS cipher-gcm-armv7-neon.lo"
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS cipher-gcm-armv8-aarch32-ce.lo"
+ ;;
+ aarch64-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS cipher-gcm-armv8-aarch64-ce.lo"
+ ;;
+ powerpc64le-*-* | powerpc64-*-* | powerpc-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS cipher-gcm-ppc.lo"
+ ;;
+esac
+
+# Arch specific MAC implementations
+case "${host}" in
+ s390x-*-*)
+ GCRYPT_ASM_DIGESTS="$GCRYPT_ASM_DIGESTS poly1305-s390x.lo"
+ ;;
+esac
+
+
+name=scrypt
+list=$enabled_kdfs
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_KDFS="$GCRYPT_KDFS scrypt.lo"
+
+printf "%s\n" "#define USE_SCRYPT 1" >>confdefs.h
+
+fi
+
+
+name=getentropy
+list=$random_modules
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_RANDOM="$GCRYPT_RANDOM rndgetentropy.lo"
+
+printf "%s\n" "#define USE_RNDGETENTROPY 1" >>confdefs.h
+
+fi
+
+
+name=linux
+list=$random_modules
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_RANDOM="$GCRYPT_RANDOM rndoldlinux.lo"
+
+printf "%s\n" "#define USE_RNDOLDLINUX 1" >>confdefs.h
+
+fi
+
+
+name=unix
+list=$random_modules
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_RANDOM="$GCRYPT_RANDOM rndunix.lo"
+
+printf "%s\n" "#define USE_RNDUNIX 1" >>confdefs.h
+
+fi
+
+
+name=egd
+list=$random_modules
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_RANDOM="$GCRYPT_RANDOM rndegd.lo"
+
+printf "%s\n" "#define USE_RNDEGD 1" >>confdefs.h
+
+fi
+
+
+name=w32
+list=$random_modules
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32.lo"
+
+printf "%s\n" "#define USE_RNDW32 1" >>confdefs.h
+
+fi
+
+
+name=w32ce
+list=$random_modules
+found=0
+
+for n in $list; do
+ if test "x$name" = "x$n"; then
+ found=1
+ fi
+done
+
+if test "$found" = "1" ; then
+ GCRYPT_RANDOM="$GCRYPT_RANDOM rndw32ce.lo"
+
+printf "%s\n" "#define USE_RNDW32CE 1" >>confdefs.h
+
+fi
+
+if test "$try_asm_modules" = yes ; then
+ # Build with assembly implementations
+ GCRYPT_CIPHERS="$GCRYPT_CIPHERS $GCRYPT_ASM_CIPHERS"
+ GCRYPT_DIGESTS="$GCRYPT_DIGESTS $GCRYPT_ASM_DIGESTS"
+fi
+
+
+
+
+
+
+
+LIBGCRYPT_CIPHERS=$enabled_ciphers
+
+LIBGCRYPT_PUBKEY_CIPHERS=$enabled_pubkey_ciphers
+
+LIBGCRYPT_DIGESTS=$enabled_digests
+
+
+# For printing the configuration we need a colon separated list of
+# algorithm names.
+tmp=`echo "$enabled_ciphers" | tr ' ' : `
+
+printf "%s\n" "#define LIBGCRYPT_CIPHERS \"$tmp\"" >>confdefs.h
+
+tmp=`echo "$enabled_pubkey_ciphers" | tr ' ' : `
+
+printf "%s\n" "#define LIBGCRYPT_PUBKEY_CIPHERS \"$tmp\"" >>confdefs.h
+
+tmp=`echo "$enabled_digests" | tr ' ' : `
+
+printf "%s\n" "#define LIBGCRYPT_DIGESTS \"$tmp\"" >>confdefs.h
+
+tmp=`echo "$enabled_kdfs" | tr ' ' : `
+
+printf "%s\n" "#define LIBGCRYPT_KDFS \"$tmp\"" >>confdefs.h
+
+
+
+#
+# Define conditional sources depending on the used hardware platform.
+# Note that all possible modules must also be listed in
+# src/Makefile.am (EXTRA_libgcrypt_la_SOURCES).
+#
+GCRYPT_HWF_MODULES=
+case "$mpi_cpu_arch" in
+ x86)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_X86 1" >>confdefs.h
+
+ GCRYPT_HWF_MODULES="libgcrypt_la-hwf-x86.lo"
+ ;;
+ alpha)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_ALPHA 1" >>confdefs.h
+
+ ;;
+ sparc)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_SPARC 1" >>confdefs.h
+
+ ;;
+ mips)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_MIPS 1" >>confdefs.h
+
+ ;;
+ m68k)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_M68K 1" >>confdefs.h
+
+ ;;
+ ppc)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_PPC 1" >>confdefs.h
+
+ GCRYPT_HWF_MODULES="libgcrypt_la-hwf-ppc.lo"
+ ;;
+ arm)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_ARM 1" >>confdefs.h
+
+ GCRYPT_HWF_MODULES="libgcrypt_la-hwf-arm.lo"
+ ;;
+ aarch64)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_ARM 1" >>confdefs.h
+
+ GCRYPT_HWF_MODULES="libgcrypt_la-hwf-arm.lo"
+ ;;
+ s390x)
+
+printf "%s\n" "#define HAVE_CPU_ARCH_S390X 1" >>confdefs.h
+
+ GCRYPT_HWF_MODULES="libgcrypt_la-hwf-s390x.lo"
+ ;;
+esac
+
+
+
+#
+# Option to disable building of doc file
+#
+build_doc=yes
+# Check whether --enable-doc was given.
+if test ${enable_doc+y}
+then :
+ enableval=$enable_doc; build_doc=$enableval
+else $as_nop
+ build_doc=yes
+fi
+
+ if test "x$build_doc" != xno; then
+ BUILD_DOC_TRUE=
+ BUILD_DOC_FALSE='#'
+else
+ BUILD_DOC_TRUE='#'
+ BUILD_DOC_FALSE=
+fi
+
+
+
+#
+# Provide information about the build.
+#
+BUILD_REVISION="aa161086"
+
+
+printf "%s\n" "#define BUILD_REVISION \"$BUILD_REVISION\"" >>confdefs.h
+
+
+BUILD_VERSION=`echo "$PACKAGE_VERSION" | sed 's/\([0-9.]*\).*/\1./'`
+BUILD_VERSION="${BUILD_VERSION}43542"
+BUILD_FILEVERSION=`echo "${BUILD_VERSION}" | tr . ,`
+
+
+
+# Check whether --enable-build-timestamp was given.
+if test ${enable_build_timestamp+y}
+then :
+ enableval=$enable_build_timestamp; if test "$enableval" = "yes"; then
+ BUILD_TIMESTAMP=`date -u +%Y-%m-%dT%H:%M+0000 2>/dev/null || date`
+ else
+ BUILD_TIMESTAMP="$enableval"
+ fi
+else $as_nop
+ BUILD_TIMESTAMP="<none>"
+fi
+
+
+
+printf "%s\n" "#define BUILD_TIMESTAMP \"$BUILD_TIMESTAMP\"" >>confdefs.h
+
+
+
+# And create the files.
+ac_config_files="$ac_config_files Makefile m4/Makefile compat/Makefile mpi/Makefile cipher/Makefile random/Makefile doc/Makefile src/Makefile src/gcrypt.h src/libgcrypt-config src/libgcrypt.pc src/versioninfo.rc tests/Makefile"
+
+ac_config_files="$ac_config_files tests/hashtest-256g"
+
+ac_config_files="$ac_config_files tests/basic-disable-all-hwf"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+printf %s "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
+printf "%s\n" "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_W32_SYSTEM_TRUE}" && test -z "${HAVE_W32_SYSTEM_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_W32_SYSTEM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_W32CE_SYSTEM_TRUE}" && test -z "${HAVE_W32CE_SYSTEM_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_W32CE_SYSTEM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${ENABLE_RANDOM_DAEMON_TRUE}" && test -z "${ENABLE_RANDOM_DAEMON_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_RANDOM_DAEMON\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_HMAC_BINARY_CHECK_TRUE}" && test -z "${USE_HMAC_BINARY_CHECK_FALSE}"; then
+ as_fn_error $? "conditional \"USE_HMAC_BINARY_CHECK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_O_FLAG_MUNGING_TRUE}" && test -z "${ENABLE_O_FLAG_MUNGING_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_O_FLAG_MUNGING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_INSTRUMENTATION_MUNGING_TRUE}" && test -z "${ENABLE_INSTRUMENTATION_MUNGING_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_INSTRUMENTATION_MUNGING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_MPIH_ADD1_TRUE}" && test -z "${MPI_MOD_ASM_MPIH_ADD1_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_MPIH_ADD1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_MPIH_SUB1_TRUE}" && test -z "${MPI_MOD_ASM_MPIH_SUB1_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_MPIH_SUB1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_MPIH_MUL1_TRUE}" && test -z "${MPI_MOD_ASM_MPIH_MUL1_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_MPIH_MUL1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_MPIH_MUL2_TRUE}" && test -z "${MPI_MOD_ASM_MPIH_MUL2_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_MPIH_MUL2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_MPIH_MUL3_TRUE}" && test -z "${MPI_MOD_ASM_MPIH_MUL3_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_MPIH_MUL3\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_MPIH_LSHIFT_TRUE}" && test -z "${MPI_MOD_ASM_MPIH_LSHIFT_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_MPIH_LSHIFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_MPIH_RSHIFT_TRUE}" && test -z "${MPI_MOD_ASM_MPIH_RSHIFT_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_MPIH_RSHIFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_UDIV_TRUE}" && test -z "${MPI_MOD_ASM_UDIV_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_UDIV\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_ASM_UDIV_QRNND_TRUE}" && test -z "${MPI_MOD_ASM_UDIV_QRNND_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_ASM_UDIV_QRNND\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_MPIH_ADD1_TRUE}" && test -z "${MPI_MOD_C_MPIH_ADD1_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_MPIH_ADD1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_MPIH_SUB1_TRUE}" && test -z "${MPI_MOD_C_MPIH_SUB1_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_MPIH_SUB1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_MPIH_MUL1_TRUE}" && test -z "${MPI_MOD_C_MPIH_MUL1_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_MPIH_MUL1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_MPIH_MUL2_TRUE}" && test -z "${MPI_MOD_C_MPIH_MUL2_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_MPIH_MUL2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_MPIH_MUL3_TRUE}" && test -z "${MPI_MOD_C_MPIH_MUL3_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_MPIH_MUL3\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_MPIH_LSHIFT_TRUE}" && test -z "${MPI_MOD_C_MPIH_LSHIFT_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_MPIH_LSHIFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_MPIH_RSHIFT_TRUE}" && test -z "${MPI_MOD_C_MPIH_RSHIFT_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_MPIH_RSHIFT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_UDIV_TRUE}" && test -z "${MPI_MOD_C_UDIV_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_UDIV\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MPI_MOD_C_UDIV_QRNND_TRUE}" && test -z "${MPI_MOD_C_UDIV_QRNND_FALSE}"; then
+ as_fn_error $? "conditional \"MPI_MOD_C_UDIV_QRNND\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_TRUE}" && test -z "${ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_PPC_VCRYPTO_EXTRA_CFLAGS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then
+ as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_DSA_TRUE}" && test -z "${USE_DSA_FALSE}"; then
+ as_fn_error $? "conditional \"USE_DSA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_RSA_TRUE}" && test -z "${USE_RSA_FALSE}"; then
+ as_fn_error $? "conditional \"USE_RSA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ELGAMAL_TRUE}" && test -z "${USE_ELGAMAL_FALSE}"; then
+ as_fn_error $? "conditional \"USE_ELGAMAL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ECC_TRUE}" && test -z "${USE_ECC_FALSE}"; then
+ as_fn_error $? "conditional \"USE_ECC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_DOC_TRUE}" && test -z "${BUILD_DOC_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by libgcrypt $as_me 1.10.3, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration links:
+$config_links
+
+Configuration commands:
+$config_commands
+
+Report bugs to <https://bugs.gnupg.org>."
+
+_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config='$ac_cs_config_escaped'
+ac_cs_version="\\
+libgcrypt config.status 1.10.3
+configured by $0, generated by GNU Autoconf 2.71,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ printf "%s\n" "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ printf "%s\n" "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ printf "%s\n" "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ printf "%s\n" "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+LD_RC='`$ECHO "$LD_RC" | $SED "$delay_single_quote_subst"`'
+reload_flag_RC='`$ECHO "$reload_flag_RC" | $SED "$delay_single_quote_subst"`'
+reload_cmds_RC='`$ECHO "$reload_cmds_RC" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_RC='`$ECHO "$old_archive_cmds_RC" | $SED "$delay_single_quote_subst"`'
+compiler_RC='`$ECHO "$compiler_RC" | $SED "$delay_single_quote_subst"`'
+GCC_RC='`$ECHO "$GCC_RC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_RC='`$ECHO "$lt_prog_compiler_no_builtin_flag_RC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_RC='`$ECHO "$lt_prog_compiler_pic_RC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_RC='`$ECHO "$lt_prog_compiler_wl_RC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_RC='`$ECHO "$lt_prog_compiler_static_RC" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_RC='`$ECHO "$lt_cv_prog_compiler_c_o_RC" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_RC='`$ECHO "$archive_cmds_need_lc_RC" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_RC='`$ECHO "$enable_shared_with_static_runtimes_RC" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_RC='`$ECHO "$export_dynamic_flag_spec_RC" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_RC='`$ECHO "$whole_archive_flag_spec_RC" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_RC='`$ECHO "$compiler_needs_object_RC" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_RC='`$ECHO "$old_archive_from_new_cmds_RC" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_RC='`$ECHO "$old_archive_from_expsyms_cmds_RC" | $SED "$delay_single_quote_subst"`'
+archive_cmds_RC='`$ECHO "$archive_cmds_RC" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_RC='`$ECHO "$archive_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`'
+module_cmds_RC='`$ECHO "$module_cmds_RC" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_RC='`$ECHO "$module_expsym_cmds_RC" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_RC='`$ECHO "$with_gnu_ld_RC" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_RC='`$ECHO "$allow_undefined_flag_RC" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_RC='`$ECHO "$no_undefined_flag_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_RC='`$ECHO "$hardcode_libdir_flag_spec_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_RC='`$ECHO "$hardcode_libdir_separator_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_RC='`$ECHO "$hardcode_direct_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_RC='`$ECHO "$hardcode_direct_absolute_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_RC='`$ECHO "$hardcode_minus_L_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_RC='`$ECHO "$hardcode_shlibpath_var_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_RC='`$ECHO "$hardcode_automatic_RC" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_RC='`$ECHO "$inherit_rpath_RC" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_RC='`$ECHO "$link_all_deplibs_RC" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_RC='`$ECHO "$always_export_symbols_RC" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_RC='`$ECHO "$export_symbols_cmds_RC" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_RC='`$ECHO "$exclude_expsyms_RC" | $SED "$delay_single_quote_subst"`'
+include_expsyms_RC='`$ECHO "$include_expsyms_RC" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_RC='`$ECHO "$prelink_cmds_RC" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_RC='`$ECHO "$postlink_cmds_RC" | $SED "$delay_single_quote_subst"`'
+file_list_spec_RC='`$ECHO "$file_list_spec_RC" | $SED "$delay_single_quote_subst"`'
+hardcode_action_RC='`$ECHO "$hardcode_action_RC" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in AS \
+DLLTOOL \
+OBJDUMP \
+SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+nm_file_list_spec \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+LD_RC \
+reload_flag_RC \
+compiler_RC \
+lt_prog_compiler_no_builtin_flag_RC \
+lt_prog_compiler_pic_RC \
+lt_prog_compiler_wl_RC \
+lt_prog_compiler_static_RC \
+lt_cv_prog_compiler_c_o_RC \
+export_dynamic_flag_spec_RC \
+whole_archive_flag_spec_RC \
+compiler_needs_object_RC \
+with_gnu_ld_RC \
+allow_undefined_flag_RC \
+no_undefined_flag_RC \
+hardcode_libdir_flag_spec_RC \
+hardcode_libdir_separator_RC \
+exclude_expsyms_RC \
+include_expsyms_RC \
+file_list_spec_RC; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec \
+reload_cmds_RC \
+old_archive_cmds_RC \
+old_archive_from_new_cmds_RC \
+old_archive_from_expsyms_cmds_RC \
+archive_cmds_RC \
+archive_expsym_cmds_RC \
+module_cmds_RC \
+module_expsym_cmds_RC \
+export_symbols_cmds_RC \
+prelink_cmds_RC \
+postlink_cmds_RC; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+
+
+build_selection=$build_libtool_modification
+
+prefix=$prefix
+exec_prefix=$exec_prefix
+libdir=$libdir
+datadir=$datadir
+DATADIRNAME=$DATADIRNAME
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "libtool-patch") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool-patch" ;;
+ ""$mpi_ln_list"") CONFIG_LINKS="$CONFIG_LINKS "$mpi_ln_list"" ;;
+ "gcrypt-conf") CONFIG_COMMANDS="$CONFIG_COMMANDS gcrypt-conf" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
+ "compat/Makefile") CONFIG_FILES="$CONFIG_FILES compat/Makefile" ;;
+ "mpi/Makefile") CONFIG_FILES="$CONFIG_FILES mpi/Makefile" ;;
+ "cipher/Makefile") CONFIG_FILES="$CONFIG_FILES cipher/Makefile" ;;
+ "random/Makefile") CONFIG_FILES="$CONFIG_FILES random/Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "src/gcrypt.h") CONFIG_FILES="$CONFIG_FILES src/gcrypt.h" ;;
+ "src/libgcrypt-config") CONFIG_FILES="$CONFIG_FILES src/libgcrypt-config" ;;
+ "src/libgcrypt.pc") CONFIG_FILES="$CONFIG_FILES src/libgcrypt.pc" ;;
+ "src/versioninfo.rc") CONFIG_FILES="$CONFIG_FILES src/versioninfo.rc" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "tests/hashtest-256g") CONFIG_FILES="$CONFIG_FILES tests/hashtest-256g" ;;
+ "tests/basic-disable-all-hwf") CONFIG_FILES="$CONFIG_FILES tests/basic-disable-all-hwf" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+ test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
+ test ${CONFIG_LINKS+y} || CONFIG_LINKS=$config_links
+ test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = "\a"
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+ :L)
+ #
+ # CONFIG_LINK
+ #
+
+ if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+ :
+ else
+ # Prefer the file from the source tree if names are identical.
+ if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+ ac_source=$srcdir/$ac_source
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
+printf "%s\n" "$as_me: linking $ac_source to $ac_file" >&6;}
+
+ if test ! -r "$ac_source"; then
+ as_fn_error $? "$ac_source: file not found" "$LINENO" 5
+ fi
+ rm -f "$ac_file"
+
+ # Try a relative symlink, then a hard link, then a copy.
+ case $ac_source in
+ [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+ *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+ esac
+ ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+ ln "$ac_source" "$ac_file" 2>/dev/null ||
+ cp -p "$ac_source" "$ac_file" ||
+ as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+ fi
+ ;;
+ :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$am_mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE=\"gmake\" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from https://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags="RC "
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Assembler program.
+AS=$lt_AS
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$lt_OBJDUMP
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and in which our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ if test x"$xsi_shell" = xyes; then
+ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
+func_dirname ()\
+{\
+\ case ${1} in\
+\ */*) func_dirname_result="${1%/*}${2}" ;;\
+\ * ) func_dirname_result="${3}" ;;\
+\ esac\
+} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_basename ()$/,/^} # func_basename /c\
+func_basename ()\
+{\
+\ func_basename_result="${1##*/}"\
+} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
+func_dirname_and_basename ()\
+{\
+\ case ${1} in\
+\ */*) func_dirname_result="${1%/*}${2}" ;;\
+\ * ) func_dirname_result="${3}" ;;\
+\ esac\
+\ func_basename_result="${1##*/}"\
+} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
+func_stripname ()\
+{\
+\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\
+\ # positional parameters, so assign one to ordinary parameter first.\
+\ func_stripname_result=${3}\
+\ func_stripname_result=${func_stripname_result#"${1}"}\
+\ func_stripname_result=${func_stripname_result%"${2}"}\
+} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
+func_split_long_opt ()\
+{\
+\ func_split_long_opt_name=${1%%=*}\
+\ func_split_long_opt_arg=${1#*=}\
+} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
+func_split_short_opt ()\
+{\
+\ func_split_short_opt_arg=${1#??}\
+\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
+} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
+func_lo2o ()\
+{\
+\ case ${1} in\
+\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
+\ *) func_lo2o_result=${1} ;;\
+\ esac\
+} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_xform ()$/,/^} # func_xform /c\
+func_xform ()\
+{\
+ func_xform_result=${1%.*}.lo\
+} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_arith ()$/,/^} # func_arith /c\
+func_arith ()\
+{\
+ func_arith_result=$(( $* ))\
+} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_len ()$/,/^} # func_len /c\
+func_len ()\
+{\
+ func_len_result=${#1}\
+} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+fi
+
+if test x"$lt_shell_append" = xyes; then
+ sed -e '/^func_append ()$/,/^} # func_append /c\
+func_append ()\
+{\
+ eval "${1}+=\\${2}"\
+} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
+func_append_quoted ()\
+{\
+\ func_quote_for_eval "${2}"\
+\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
+} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+
+
+ # Save a `func_append' function call where possible by direct use of '+='
+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+else
+ # Save a `func_append' function call even when '+=' is not available
+ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
+printf "%s\n" "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
+fi
+
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+
+ cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: RC
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_RC
+reload_cmds=$lt_reload_cmds_RC
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_RC
+
+# A language specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_RC
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_RC
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_RC
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_RC
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_RC
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_RC
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_RC
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# ### END LIBTOOL TAG CONFIG: RC
+_LT_EOF
+
+ ;;
+ "libtool-patch":C)
+ if test "$build_selection" = never; then
+ echo "patch not applied"
+ elif (mv -f libtool libtool.orig; \
+ sed -f $srcdir/build-aux/libtool-patch.sed libtool.orig >libtool); then
+ echo "applied successfully"
+ elif test "$build_selection" = try; then
+ mv -f libtool.orig libtool
+ echo "patch failed, thus, using original"
+ else
+ echo "patch failed"
+ as_fn_exit 1
+ fi
+ ;;
+ "gcrypt-conf":C)
+chmod +x src/libgcrypt-config
+ ;;
+ "tests/hashtest-256g":F) chmod +x tests/hashtest-256g ;;
+ "tests/basic-disable-all-hwf":F) chmod +x tests/basic-disable-all-hwf ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+
+detection_module="${GCRYPT_HWF_MODULES%.lo}"
+test -n "$detection_module" || detection_module="none"
+
+# Give some feedback
+
+ echo " " 1>&6
+
+
+ echo " Libgcrypt v${VERSION} has been configured as follows:" 1>&6
+
+
+ echo " " 1>&6
+
+
+ echo " Platform: $PRINTABLE_OS_NAME ($host)" 1>&6
+
+
+ echo " Hardware detection module: $detection_module" 1>&6
+
+
+ tmp=" Enabled cipher algorithms:"
+ tmpi="abc"
+ if test "${#tmpi}" -ne 3 >/dev/null 2>&1 ; then
+ echo "$tmp $enabled_ciphers" 1>&6
+ else
+ tmpi=`echo "$tmp"| sed 's/./ /g'`
+ echo $enabled_ciphers EOF | tr ' ' '\n' | \
+ while read word; do
+ if test "${#tmp}" -gt 70 ; then
+ echo "$tmp" 1>&6
+ tmp="$tmpi"
+ fi
+ if test "$word" = "EOF" ; then
+ echo "$tmp" 1>&6
+ else
+ tmp="$tmp $word"
+ fi
+ done
+ fi
+
+
+ tmp=" Enabled digest algorithms:"
+ tmpi="abc"
+ if test "${#tmpi}" -ne 3 >/dev/null 2>&1 ; then
+ echo "$tmp $enabled_digests" 1>&6
+ else
+ tmpi=`echo "$tmp"| sed 's/./ /g'`
+ echo $enabled_digests EOF | tr ' ' '\n' | \
+ while read word; do
+ if test "${#tmp}" -gt 70 ; then
+ echo "$tmp" 1>&6
+ tmp="$tmpi"
+ fi
+ if test "$word" = "EOF" ; then
+ echo "$tmp" 1>&6
+ else
+ tmp="$tmp $word"
+ fi
+ done
+ fi
+
+
+ tmp=" Enabled kdf algorithms: "
+ tmpi="abc"
+ if test "${#tmpi}" -ne 3 >/dev/null 2>&1 ; then
+ echo "$tmp $enabled_kdfs" 1>&6
+ else
+ tmpi=`echo "$tmp"| sed 's/./ /g'`
+ echo $enabled_kdfs EOF | tr ' ' '\n' | \
+ while read word; do
+ if test "${#tmp}" -gt 70 ; then
+ echo "$tmp" 1>&6
+ tmp="$tmpi"
+ fi
+ if test "$word" = "EOF" ; then
+ echo "$tmp" 1>&6
+ else
+ tmp="$tmp $word"
+ fi
+ done
+ fi
+
+
+ tmp=" Enabled pubkey algorithms:"
+ tmpi="abc"
+ if test "${#tmpi}" -ne 3 >/dev/null 2>&1 ; then
+ echo "$tmp $enabled_pubkey_ciphers" 1>&6
+ else
+ tmpi=`echo "$tmp"| sed 's/./ /g'`
+ echo $enabled_pubkey_ciphers EOF | tr ' ' '\n' | \
+ while read word; do
+ if test "${#tmp}" -gt 70 ; then
+ echo "$tmp" 1>&6
+ tmp="$tmpi"
+ fi
+ if test "$word" = "EOF" ; then
+ echo "$tmp" 1>&6
+ else
+ tmp="$tmp $word"
+ fi
+ done
+ fi
+
+
+ echo " Random number generator: $random" 1>&6
+
+
+ echo " Try using jitter entropy: $jentsupport" 1>&6
+
+
+ echo " Using linux capabilities: $use_capabilities" 1>&6
+
+
+ echo " FIPS module version: $fips_module_version" 1>&6
+
+
+ echo " Try using Padlock crypto: $padlocksupport" 1>&6
+
+
+ echo " Try using AES-NI crypto: $aesnisupport" 1>&6
+
+
+ echo " Try using Intel SHAEXT: $shaextsupport" 1>&6
+
+
+ echo " Try using Intel PCLMUL: $pclmulsupport" 1>&6
+
+
+ echo " Try using Intel SSE4.1: $sse41support" 1>&6
+
+
+ echo " Try using DRNG (RDRAND): $drngsupport" 1>&6
+
+
+ echo " Try using Intel AVX: $avxsupport" 1>&6
+
+
+ echo " Try using Intel AVX2: $avx2support" 1>&6
+
+
+ echo " Try using ARM NEON: $neonsupport" 1>&6
+
+
+ echo " Try using ARMv8 crypto: $armcryptosupport" 1>&6
+
+
+ echo " Try using PPC crypto: $ppccryptosupport" 1>&6
+
+
+ echo " " 1>&6
+
+
+if test "x${gpg_config_script_warn}" != x; then
+cat <<G10EOF
+ Mismatches between the target platform and the to
+ be used libraries have been been detected for:
+ ${gpg_config_script_warn}
+ Please check above for warning messages.
+
+G10EOF
+fi
+
+if test "$gcry_cv_gcc_attribute_aligned" != "yes" ; then
+cat <<G10EOF
+ Please note that your compiler does not support the GCC style
+ aligned attribute. Using this software may evoke bus errors.
+
+G10EOF
+fi
+
+if test -n "$gpl"; then
+ echo "Please note that you are building a version of Libgcrypt with"
+ echo " $gpl"
+ echo "included. These parts are licensed under the GPL and thus the"
+ echo "use of this library has to comply with the conditions of the GPL."
+ echo ""
+fi
+
m4_define([mym4_package],[libgcrypt])
m4_define([mym4_major], [1])
m4_define([mym4_minor], [10])
-m4_define([mym4_micro], [1])
+m4_define([mym4_micro], [3])
# Below is m4 magic to extract and compute the git revision number,
# the decimalized short revision number, a beta version string and a
# (No interfaces changed: REVISION++)
LIBGCRYPT_LT_CURRENT=24
LIBGCRYPT_LT_AGE=4
-LIBGCRYPT_LT_REVISION=1
+LIBGCRYPT_LT_REVISION=3
################################################
AC_SUBST(LIBGCRYPT_LT_CURRENT)
AC_CANONICAL_HOST
AM_MAINTAINER_MODE
AM_SILENT_RULES
+AC_USE_SYSTEM_EXTENSIONS
AC_ARG_VAR(SYSROOT,[locate config scripts also below that directory])
AC_PROG_INSTALL
AC_PROG_AWK
-AC_USE_SYSTEM_EXTENSIONS
-
# Taken from mpfr-4.0.1, then modified for LDADD_FOR_TESTS_KLUDGE
dnl Under Linux, make sure that the old dtags are used if LD_LIBRARY_PATH
dnl is defined. The issue is that with the new dtags, LD_LIBRARY_PATH has
AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM",
[defined to the name of the weaker random device])
+#
+# Specify how we support our local modification of libtool for Windows
+# 64-bit. Options are:
+#
+# (1) apply: when appying patch fails, it results failure of entire build
+# (2) never: never apply the patch (no try)
+# (3) try: use patched if it goes well, use original if fails
+#
+AC_ARG_WITH([libtool-modification],
+ AS_HELP_STRING([--with-libtool-modification=apply|never|try],
+ [how to handle libtool modification (default=never)]),
+ build_libtool_modification=$withval,
+ build_libtool_modification=never)
+
+#
+# Apply a patch (locally maintained one of ours) to libtool
+#
+case $host in
+ x86_64-*mingw32*)
+AC_CONFIG_COMMANDS([libtool-patch],[[
+ if test "$build_selection" = never; then
+ echo "patch not applied"
+ elif (mv -f libtool libtool.orig; \
+ sed -f $srcdir/build-aux/libtool-patch.sed libtool.orig >libtool); then
+ echo "applied successfully"
+ elif test "$build_selection" = try; then
+ mv -f libtool.orig libtool
+ echo "patch failed, thus, using original"
+ else
+ echo "patch failed"
+ as_fn_exit 1
+ fi
+]],[build_selection=$build_libtool_modification])
+ ;;
+ *)
+ ;;
+esac
###############################
#### Checks for libraries. ####
/* Test if '.type' and '.size' are supported. */
".size asmfunc,.-asmfunc;\n\t"
".type asmfunc,%function;\n\t"
- );]], [ asmfunc(); ] )],
+ );
+ void asmfunc(void);]], [ asmfunc(); ] )],
[gcry_cv_gcc_arm_platform_as_ok=yes])
fi])
if test "$gcry_cv_gcc_arm_platform_as_ok" = "yes" ; then
"eor x0, x0, x30, ror #12;\n\t"
"add x0, x0, x30, asr #12;\n\t"
"eor v0.16b, v0.16b, v31.16b;\n\t"
- );]], [ asmfunc(); ] )],
+ );
+ void asmfunc(void);]], [ asmfunc(); ] )],
[gcry_cv_gcc_aarch64_platform_as_ok=yes])
fi])
if test "$gcry_cv_gcc_aarch64_platform_as_ok" = "yes" ; then
".cfi_restore_state\n\t"
".long 0\n\t"
".cfi_endproc\n\t"
- );]])],
+ );
+ void asmfunc(void)]])],
[gcry_cv_gcc_asm_cfi_directives=yes])])
if test "$gcry_cv_gcc_asm_cfi_directives" = "yes" ; then
AC_DEFINE(HAVE_GCC_ASM_CFI_DIRECTIVES,1,
[gcry_cv_gcc_as_const_division_ok],
[gcry_cv_gcc_as_const_division_ok=no
AC_LINK_IFELSE([AC_LANG_PROGRAM(
- [[__asm__(".text\n\tfn:\n\t xorl \$(123456789/12345678), %ebp;\n\t");]],
+ [[__asm__(".text\n\tfn:\n\t xorl \$(123456789/12345678), %ebp;\n\t");
+ void fn(void);]],
[fn();])],
[gcry_cv_gcc_as_const_division_ok=yes])])
if test "$gcry_cv_gcc_as_const_division_ok" = "no" ; then
[gcry_cv_gcc_as_const_division_with_wadivide_ok],
[gcry_cv_gcc_as_const_division_with_wadivide_ok=no
AC_LINK_IFELSE([AC_LANG_PROGRAM(
- [[__asm__(".text\n\tfn:\n\t xorl \$(123456789/12345678), %ebp;\n\t");]],
+ [[__asm__(".text\n\tfn:\n\t xorl \$(123456789/12345678), %ebp;\n\t");
+ void fn(void);]],
[fn();])],
[gcry_cv_gcc_as_const_division_with_wadivide_ok=yes])])
if test "$gcry_cv_gcc_as_const_division_with_wadivide_ok" = "no" ; then
/* Test if '.type' and '.size' are supported. */
/* These work only on ELF targets. */
".text\n\t"
- "asmfunc:\n\t"
+ "asmfunc:\n\t"
".size asmfunc,.-asmfunc;\n\t"
".type asmfunc,@function;\n\t"
- /* Test if assembler allows use of '/' for constant division
- * (Solaris/x86 issue). If previous constant division check
- * and "-Wa,--divide" workaround failed, this causes assembly
- * to be disable on this machine. */
- "xorl \$(123456789/12345678), %ebp;\n\t"
- );]], [ asmfunc(); ])],
+ /* Test if assembler allows use of '/' for constant division
+ * (Solaris/x86 issue). If previous constant division check
+ * and "-Wa,--divide" workaround failed, this causes assembly
+ * to be disable on this machine. */
+ "xorl \$(123456789/12345678), %ebp;\n\t"
+ );
+ void asmfunc(void);]], [ asmfunc(); ])],
[gcry_cv_gcc_amd64_platform_as_ok=yes])
fi])
if test "$gcry_cv_gcc_amd64_platform_as_ok" = "yes" ; then
".globl asmfunc\n\t"
"asmfunc:\n\t"
"xorq \$(1234), %rbp;\n\t"
- );]], [ asmfunc(); ])],
+ );
+ void asmfunc(void);]], [ asmfunc(); ])],
[gcry_cv_gcc_win64_platform_as_ok=yes])])
if test "$gcry_cv_gcc_win64_platform_as_ok" = "yes" ; then
AC_DEFINE(HAVE_COMPATIBLE_GCC_WIN64_PLATFORM_AS,1,
"sub eax, [esp + 4];\n\t"
"add dword ptr [esp + eax], 0b10101;\n\t"
".att_syntax prefix\n\t"
- );]], [ actest(); ])],
+ );
+ void actest(void);]], [ actest(); ])],
[gcry_cv_gcc_platform_as_ok_for_intel_syntax=yes])
fi])
if test "$gcry_cv_gcc_platform_as_ok_for_intel_syntax" = "yes" ; then
"vadd.u64 %q0, %q1;\n\t"
"vadd.s64 %d3, %d2, %d3;\n\t"
);
+ void testfn(void);
]], [ testfn(); ])],
[gcry_cv_gcc_inline_asm_neon=yes])
fi])
"vmull.p64 q0, d0, d0;\n\t"
);
+ void testfn(void);
]], [ testfn(); ])],
[gcry_cv_gcc_inline_asm_aarch32_crypto=yes])
fi])
"dup v0.8b, w0;\n\t"
"ld4 {v0.8b,v1.8b,v2.8b,v3.8b},[x0],\#32;\n\t"
);
+ void testfn(void);
]], [ testfn(); ])],
[gcry_cv_gcc_inline_asm_aarch64_neon=yes])
fi])
"pmull v0.1q, v0.1d, v31.1d;\n\t"
"pmull2 v0.1q, v0.2d, v31.2d;\n\t"
);
+ void testfn(void);
]], [ testfn(); ])],
[gcry_cv_gcc_inline_asm_aarch64_crypto=yes])
fi])
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[__asm__(".globl testfn;\n"
".text\n\t"
- "testfn:\n"
- "stvx %v31,%r12,%r0;\n"
- "lvx %v20,%r12,%r0;\n"
- "vcipher %v0, %v1, %v22;\n"
- "lxvw4x %vs32, %r0, %r1;\n"
- "vadduwm %v0, %v1, %v22;\n"
- "vshasigmaw %v0, %v1, 0, 15;\n"
- "vshasigmad %v0, %v1, 0, 15;\n"
- "vpmsumd %v11, %v11, %v11;\n"
- );
+ "testfn:\n"
+ "stvx %v31,%r12,%r0;\n"
+ "lvx %v20,%r12,%r0;\n"
+ "vcipher %v0, %v1, %v22;\n"
+ "lxvw4x %vs32, %r0, %r1;\n"
+ "vadduwm %v0, %v1, %v22;\n"
+ "vshasigmaw %v0, %v1, 0, 15;\n"
+ "vshasigmad %v0, %v1, 0, 15;\n"
+ "vpmsumd %v11, %v11, %v11;\n"
+ );
+ void testfn(void);
]], [ testfn(); ] )],
[gcry_cv_gcc_inline_asm_ppc_altivec=yes])
fi])
gcry_cv_gcc_inline_asm_ppc_arch_3_00=no
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[__asm__(".text\n\t"
- ".globl testfn;\n"
- "testfn:\n"
- "stxvb16x %r1,%v12,%v30;\n"
- );
+ ".globl testfn;\n"
+ "testfn:\n"
+ "stxvb16x %r1,%v12,%v30;\n"
+ );
+ void testfn(void);
]], [ testfn(); ])],
[gcry_cv_gcc_inline_asm_ppc_arch_3_00=yes])
fi])
fi
LIST_MEMBER(dsa, $enabled_pubkey_ciphers)
+AM_CONDITIONAL(USE_DSA, [test "$found" = "1"])
if test "$found" = "1" ; then
GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS dsa.lo"
AC_DEFINE(USE_DSA, 1, [Defined if this module should be included])
fi
LIST_MEMBER(rsa, $enabled_pubkey_ciphers)
+AM_CONDITIONAL(USE_RSA, [test "$found" = "1"])
if test "$found" = "1" ; then
GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS rsa.lo"
AC_DEFINE(USE_RSA, 1, [Defined if this module should be included])
fi
LIST_MEMBER(elgamal, $enabled_pubkey_ciphers)
+AM_CONDITIONAL(USE_ELGAMAL, [test "$found" = "1"])
if test "$found" = "1" ; then
GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS elgamal.lo"
AC_DEFINE(USE_ELGAMAL, 1, [Defined if this module should be included])
fi
LIST_MEMBER(ecc, $enabled_pubkey_ciphers)
+AM_CONDITIONAL(USE_ECC, [test "$found" = "1"])
if test "$found" = "1" ; then
GCRYPT_PUBKEY_CIPHERS="$GCRYPT_PUBKEY_CIPHERS \
ecc.lo ecc-curves.lo ecc-misc.lo \
if test "$gcry_cv_gcc_attribute_aligned" != "yes" ; then
cat <<G10EOF
- Please not that your compiler does not support the GCC style
+ Please note that your compiler does not support the GCC style
aligned attribute. Using this software may evoke bus errors.
G10EOF
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2002 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \
+ $(srcdir)/stamp-vti $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
+am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
+am__v_DVIPS_0 = @echo " DVIPS " $@;
+am__v_DVIPS_1 =
+AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
+am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
+am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
+am__v_MAKEINFO_1 =
+AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
+am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
+am__v_INFOHTML_0 = @echo " INFOHTML" $@;
+am__v_INFOHTML_1 =
+AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
+am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
+am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@;
+am__v_TEXI2DVI_1 =
+AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
+am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
+am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@;
+am__v_TEXI2PDF_1 =
+AM_V_texinfo = $(am__v_texinfo_@AM_V@)
+am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 =
+AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
+am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 =
+INFO_DEPS = $(srcdir)/gcrypt.info
+TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
+DVIS = gcrypt.dvi
+PDFS = gcrypt.pdf
+PSS = gcrypt.ps
+HTMLS = gcrypt.html
+TEXINFOS = gcrypt.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(gcrypt_TEXINFOS) $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/mdate-sh \
+ $(top_srcdir)/build-aux/texinfo.tex
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = README.apichanges HACKING DCO \
+ libgcrypt-modules.png fips-fsm.png \
+ libgcrypt-modules.pdf fips-fsm.pdf \
+ yat2m.c
+
+DISTCLEANFILES = gcrypt.cps yat2m-stamp.tmp yat2m-stamp $(myman_pages)
+CLEANFILES = yat2m
+BUILT_SOURCES = libgcrypt-modules.png fips-fsm.png \
+ libgcrypt-modules.pdf fips-fsm.pdf
+
+info_TEXINFOS = gcrypt.texi
+gcrypt_TEXINFOS = lgpl.texi gpl.texi libgcrypt-modules.fig fips-fsm.fig
+YAT2M_OPTIONS = -I $(srcdir) \
+ --release "Libgcrypt @PACKAGE_VERSION@" --source "Libgcrypt"
+
+myman_sources = gcrypt.texi
+myman_pages = hmac256.1
+man_MANS = $(myman_pages)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .eps .fig .html .info .jpg .pdf .png .ps .texi
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+.texi.info:
+ $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ $(am__cd) $(srcdir); \
+ else \
+ rc=$$?; \
+ $(am__cd) $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+ $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.pdf:
+ $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.html:
+ $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+ $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ then \
+ rm -rf $@ && mv $(@:.html=.htp) $@; \
+ else \
+ rm -rf $(@:.html=.htp); exit 1; \
+ fi
+$(srcdir)/gcrypt.info: gcrypt.texi $(srcdir)/version.texi $(gcrypt_TEXINFOS)
+gcrypt.dvi: gcrypt.texi $(srcdir)/version.texi $(gcrypt_TEXINFOS)
+gcrypt.pdf: gcrypt.texi $(srcdir)/version.texi $(gcrypt_TEXINFOS)
+gcrypt.html: gcrypt.texi $(srcdir)/version.texi $(gcrypt_TEXINFOS)
+$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: gcrypt.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./gcrypt.texi || dir=$(srcdir); \
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/gcrypt.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \
+ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi" && \
+ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \
+ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \
+ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp* $(srcdir)/version.texi.tmp*
+
+maintainer-clean-vti:
+@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+.dvi.ps:
+ $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf gcrypt.t2d gcrypt.t2p
+
+clean-aminfo:
+ -test -z "gcrypt.dvi gcrypt.pdf gcrypt.ps gcrypt.html" \
+ || rm -rf gcrypt.dvi gcrypt.pdf gcrypt.ps gcrypt.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(INFO_DEPS) $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ d2=$$d$$p; \
+ if test -d "$$d2"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d2"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+ fi; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-vti
+
+pdf: pdf-am
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-man uninstall-pdf-am uninstall-ps-am
+
+uninstall-man: uninstall-man1
+
+.MAKE: all check install install-am install-exec install-strip
+
+.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
+ clean-libtool cscopelist-am ctags-am dist-info distclean \
+ distclean-generic distclean-libtool distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-man1 install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \
+ pdf-am ps ps-am tags-am uninstall uninstall-am \
+ uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-man uninstall-man1 uninstall-pdf-am uninstall-ps-am
+
+.PRECIOUS: Makefile
+
+
+yat2m: yat2m.c
+ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) \
+ $(CPPFLAGS_FOR_BUILD) -o $@ $(srcdir)/yat2m.c
+
+.fig.png:
+ fig2dev -L png `test -f '$<' || echo '$(srcdir)/'`$< $@
+
+.fig.jpg:
+ fig2dev -L jpg `test -f '$<' || echo '$(srcdir)/'`$< $@
+
+.fig.eps:
+ fig2dev -L eps `test -f '$<' || echo '$(srcdir)/'`$< $@
+
+.fig.pdf:
+ fig2dev -L pdf `test -f '$<' || echo '$(srcdir)/'`$< $@
+
+yat2m-stamp: $(myman_sources)
+ @rm -f yat2m-stamp.tmp
+ @touch yat2m-stamp.tmp
+ for file in $(myman_sources) ; do \
+ ./yat2m $(YAT2M_OPTIONS) --store \
+ `test -f '$$file' || echo '$(srcdir)/'`$$file ; done
+ @mv -f yat2m-stamp.tmp $@
+
+yat2m-stamp: yat2m
+
+$(myman_pages) : yat2m-stamp
+ @if test -f $@; then :; else \
+ trap 'rm -rf yat2m-stamp yat2m-lock' 1 2 13 15; \
+ if mkdir yat2m-lock 2>/dev/null; then \
+ rm -f yat2m-stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) yat2m-stamp; \
+ rmdir yat2m-lock; \
+ else \
+ while test -d yat2m-lock; do sleep 1; done; \
+ test -f yat2m-stamp; exit $$?; \
+ fi; \
+ fi
+
+# Make sure that gcrypt.texi is touched if any other source file has
+# been modified. This is required so that the version.texi magic
+# updates the release date.
+gcrypt.texi : $(gcrypt_TEXINFOS)
+ touch $(srcdir)/gcrypt.texi
+
+online: gcrypt.html gcrypt.pdf gcrypt.info
+ set -e; \
+ echo "Uploading current manuals to www.gnupg.org ..."; \
+ cp libgcrypt-modules.png gcrypt.html/; \
+ cp fips-fsm.png gcrypt.html/; \
+ user=werner ; dashdevel="" ; \
+ if echo "@PACKAGE_VERSION@" | grep -- "-svn" >/dev/null; then \
+ dashdevel="-devel" ; \
+ cp gcrypt.pdf gcrypt.html/; \
+ cp gcrypt.info gcrypt.html/; \
+ else \
+ rsync -v gcrypt.pdf gcrypt.info \
+ $${user}@trithemius.gnupg.org:webspace/manuals/ ; \
+ fi ; \
+ cd gcrypt.html ; \
+ rsync -vr --exclude='.svn' . \
+ $${user}@trithemius.gnupg.org:webspace/manuals/gcrypt$${dashdevel}/
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
+++ /dev/null
-Various private notes
-
-[Von Joachim Ziegler]
-PS: Mir fällt gerade ein: ich hatte noch einen Trick: der Grundschritt beim
-modularen Potenzieren besteht aus Quadrieren und Dividieren. Und das
-Quadrieren als Spezialfall kann man noch schneller machen als das
-Multiplizieren, weil sich die Karatsuba-Formel noch mal vereinfachen lässt...
-(und der Trick ist, glaube ich, nicht in GMP drin)
+++ /dev/null
-To: gnupg-announce@gnupg.org, info-gnu@gnu.org
-Cc: gcrypt-devel@gnupg.org
-
-
-Hello!
-
-We are pleased to announce the availability of Libgcrypt 1.4.0. This
-is the new stable version of Libgcrypt and upward compatible with the
-1.2 series.
-
-The 1.2 series will enter end of life state in 2 years on 2009-12-31.
-
-Libgcrypt is a general purpose library of cryptographic building
-blocks. It is originally based on code used by GnuPG. It does not
-provide any implementation of OpenPGP or other protocols. Thorough
-understanding of applied cryptography is required to use Libgcrypt.
-
-
-Noteworthy changes between 1.2.x and 1.4.0 are:
-
- * Support for SHA-224 and HMAC using SHA-384 and SHA-512.
-
- * Support for the SEED cipher.
-
- * Support for the Camellia cipher.
-
- * Support for OFB encryption mode.
-
- * Support for DSA2.
-
- * Support for Microsoft Windows.
-
- * The entire library is now under the LGPLv2+. The helper programs
- and the manual are under the GPLv2+. Kudos to Peter Gutmann for
- giving permissions to relicense the rndw32 and rndunix modules.
-
- * The visibility attribute is now used if supported by the toolchain.
-
- * The ACE engine of VIA processors is now used for AES-128.
-
- * Changed the way the RNG gets initialized. This allows to keep it
- uninitialized as long as no random numbers are used.
-
- * Updated the entropy gatherer for W32.
-
- * Made the RNG immune against fork without exec.
-
- * Reading and writing the random seed file is now protected by a
- fcntl style file lock on systems that provide this function.
-
- * gcry_mpi_rshift does not anymore truncate the shift count.
-
- * Reserved algorithm ranges for use by applications.
-
- * The new function gcry_md_debug should be used instead of the
- gcry_md_start_debug and gcry_md_stop_debug macros.
-
- * Non executable stack support is now used by default on systems
- supporting it.
-
- * Assembler support for the AMD64 architecture.
-
- * New configure option --enable-mpi-path for optimized builds.
-
- * Fixed a bug in the detection of symbol prefixes which inhibited the
- build of optimized assembler code on certain systems.
-
- * New control code GCRYCTL_PRINT_CONFIG to print the build
- configuration.
-
- * Experimental support for ECDSA; should only be used for testing.
-
- * New configure option --enable-random-daemon to support a system
- wide random daemon. The daemon code is experimental and not yet
- very well working. It will eventually allow to keep a global
- random pool for the sake of short living processes.
-
- * Minor changes to some function declarations. Buffer arguments are
- now typed as void pointer. This should not affect any compilation.
- Fixed two bugs in return values and clarified documentation.
-
- * Interface changes relative to the 1.2.0 release:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- gcry_fast_random_pol NEW.
- gcry_md_debug NEW.
- gcry_sexp_nth_string NEW.
- GCRY_MD_SHA224 NEW.
- GCRY_PK_USAGE_CERT NEW.
- GCRY_PK_USAGE_AUTH NEW.
- GCRY_PK_USAGE_UNKN NEW.
- GCRY_PK_ECDSA NEW.
- GCRY_CIPHER_SEED NEW.
- GCRY_CIPHER_CAMELLIA128 NEW.
- GCRY_CIPHER_CAMELLIA192 NEW.
- GCRY_CIPHER_CAMELLIA256 NEW.
- GCRYCTL_FAKED_RANDOM_P NEW.
- GCRYCTL_PRINT_CONFIG NEW.
- GCRYCTL_SET_RNDEGD_SOCKET NEW.
- gcry_mpi_scan CHANGED: Argument BUFFER is now void*.
- gcry_pk_algo_name CHANGED: Returns "?" instead of NULL.
- gcry_cipher_algo_name CHANGED: Returns "?" instead of "".
- gcry_pk_spec_t CHANGED: Element ALIASES is now const ptr.
- gcry_md_write_t CHANGED: Argument BUF is now a const void*.
- gcry_md_ctl CHANGED: Argument BUFFER is now void*.
- gcry_cipher_encrypt CHANGED: Arguments IN and OUT are now void*.
- gcry_cipher_decrypt CHANGED: Arguments IN and OUT are now void*.
- gcry_sexp_sprint CHANGED: Argument BUFFER is now void*.
- gcry_create_nonce CHANGED: Argument BUFFER is now void*.
- gcry_randomize CHANGED: Argument BUFFER is now void*.
- gcry_cipher_register CHANGED: Argument ALGORITHM_ID is now int*.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-Source code is hosted at the GnuPG FTP server and its mirrors as
-listed at http://www.gnupg.org/download/mirrors.html . On the primary
-server the source file and its digital signatures is:
-
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.0.tar.bz2 (942k)
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.0.tar.bz2.sig
-
-This file is bzip2 compressed. A gzip compressed version is also
-available:
-
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.0.tar.gz (1176k)
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.0.tar.gz.sig
-
-The SHA-1 checksums are:
-
-cd1b52e8ecfa361737c6f130ed2f1d850e312c16 libgcrypt-1.4.0.tar.bz2
-69183b7100b60da8eb1648f49836a611454541bb libgcrypt-1.4.0.tar.gz
-
-For help on developing with Libgcrypt you should read the included
-manual and optional ask on the gcrypt-devel mailing list [1].
-
-Improving Libgcrypt is costly, but you can help! We are looking for
-organizations that find Libgcrypt useful and wish to contribute back.
-You can contribute by reporting bugs, improve the software [2], or by
-donating money.
-
-Commercial support contracts for Libgcrypt are available [3], and they
-help finance continued maintenance. g10 Code GmbH, a Duesseldorf
-based company, is currently funding Libgcrypt development. We are
-always looking for interesting development projects.
-
-Many thanks to all who contributed to Libgcrypt development, be it bug
-fixes, code, documentation, testing or helping users.
-
-Happy hacking,
-
- Werner
-
-
-[1] See http://www.gnupg.org/documentation/mailing-lists.html .
-[2] Note that copyright assignments to the FSF are required.
-[3] See the service directory at http://www.gnupg.org/service.html .
+++ /dev/null
-To: gnupg-announce@gnupg.org, info-gnu@gnu.org
-Cc: gcrypt-devel@gnupg.org
-
-
-Hello!
-
-The GNU project is pleased to announce the availability of Libgcrypt
-version 1.4.3.
-
-Libgcrypt is a general purpose library of cryptographic building
-blocks. It is originally based on code used by GnuPG. It does not
-provide any implementation of OpenPGP or other protocols. Thorough
-understanding of applied cryptography is required to use Libgcrypt.
-
-Noteworthy changes in version 1.4.3:
-
- * Try to auto-initialize Libgcrypt to minimize the effect of
- applications not doing that correctly. This is not a perfect
- solution but given that many applicationion would totally fail
- without such a hack, we try to help at least with the most common
- cases. Folks, please read the manual to learn how to properly
- initialize Libgcrypt!
-
- * Auto-initialize the secure memory to 32k instead of aborting the
- process.
-
- * Log fatal errors via syslog.
-
- * Changed the name and the semantics of the fips mode config file.
-
- * Add convenience macro gcry_fips_mode_active.
-
- * More self-tests.
-
- * Documentation cleanups.
-
-
-Source code is hosted at the GnuPG FTP server and its mirrors as
-listed at http://www.gnupg.org/download/mirrors.html . On the primary
-server the source file and its digital signatures is:
-
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.3.tar.bz2 (1062k)
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.3.tar.bz2.sig
-
-This file is bzip2 compressed. A gzip compressed version is also
-available:
-
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.3.tar.gz (1325k)
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.3.tar.gz.sig
-
-Alternativley you may upgrade version 1.4.2 using this patch file:
-
- ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.2-1.4.3.diff.bz2 (42k)
-
-The SHA-1 checksums are:
-
-bdc67c1fdcec464a94dca691615f2335a12db5ce libgcrypt-1.4.3.tar.bz2
-3d9d583501ce951596fa7dd3667afd357ac7d056 libgcrypt-1.4.3.tar.gz
-e28b74c5824364e20ae7f147f1b89925f5426669 libgcrypt-1.4.2-1.4.3.diff.bz2
-
-
-For help on developing with Libgcrypt you should read the included
-manual and optional ask on the gcrypt-devel mailing list [1].
-
-Improving Libgcrypt is costly, but you can help! We are looking for
-organizations that find Libgcrypt useful and wish to contribute back.
-You can contribute by reporting bugs, improve the software [2], order
-extensions or support or more general by donating money to the Free
-Software movement [3].
-
-Commercial support contracts for Libgcrypt are available [4], and they
-help finance continued maintenance. g10 Code GmbH, a Duesseldorf
-based company, is currently funding Libgcrypt development. We are
-always looking for interesting development projects.
-
-Many thanks to all who contributed to Libgcrypt development, be it bug
-fixes, code, documentation, testing or helping users.
-
-
-Happy hacking,
-
- Werner
-
-
-
-
-[1] See http://www.gnupg.org/documentation/mailing-lists.html .
-[2] Note that copyright assignments to the FSF are required.
-[3] For example see http://donate.fsf.org .
-[4] See the service directory at http://www.gnupg.org/service.html .
-
--- /dev/null
+This is gcrypt.info, produced by makeinfo version 6.8 from gcrypt.texi.
+
+This manual is for Libgcrypt version 1.10.3 and was last updated 19
+October 2023. Libgcrypt is GNU's library of cryptographic building
+blocks.
+
+Copyright (C) 2000, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2011, 2012
+Free Software Foundation, Inc.
+Copyright (C) 2012, 2013, 2016, 2017 g10 Code GmbH
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version. The text of the
+ license can be found in the section entitled "GNU General Public
+ License".
+INFO-DIR-SECTION GNU Libraries
+START-INFO-DIR-ENTRY
+* libgcrypt: (gcrypt). Cryptographic function library.
+END-INFO-DIR-ENTRY
+
+\1f
+Indirect:
+gcrypt.info-1: 862
+gcrypt.info-2: 310055
+\1f
+Tag Table:
+(Indirect)
+Node: Top\7f862
+Node: Introduction\7f3415
+Node: Getting Started\7f3787
+Node: Features\7f4667
+Node: Overview\7f5452
+Node: Preparation\7f6075
+Node: Header\7f7060
+Node: Building sources\7f8131
+Node: Building sources using Automake\7f10059
+Node: Initializing the library\7f11359
+Ref: sample-use-suspend-secmem\7f14751
+Ref: sample-use-resume-secmem\7f15594
+Node: Multi-Threading\7f16497
+Ref: Multi-Threading-Footnote-1\7f17676
+Node: Enabling FIPS mode\7f18085
+Ref: enabling fips mode\7f18268
+Node: Disabling FIPS mode\7f19537
+Ref: disabling fips mode\7f19724
+Node: Hardware features\7f20175
+Ref: hardware features\7f20343
+Ref: Hardware features-Footnote-1\7f21667
+Node: Generalities\7f21825
+Node: Controlling the library\7f22084
+Node: Error Handling\7f44629
+Node: Error Values\7f47168
+Node: Error Sources\7f52108
+Node: Error Codes\7f54376
+Node: Error Strings\7f57852
+Node: Handler Functions\7f59036
+Node: Progress handler\7f59595
+Node: Allocation handler\7f61744
+Node: Error handler\7f63290
+Node: Logging handler\7f64856
+Node: Symmetric cryptography\7f65448
+Node: Available ciphers\7f66188
+Node: Available cipher modes\7f69336
+Node: Working with cipher handles\7f75471
+Node: General cipher functions\7f88171
+Node: Public Key cryptography\7f91690
+Node: Available algorithms\7f92529
+Node: Used S-expressions\7f92829
+Node: RSA key parameters\7f93955
+Node: DSA key parameters\7f95233
+Node: ECC key parameters\7f95888
+Ref: ecc_keyparam\7f96039
+Node: Cryptographic Functions\7f100076
+Node: Dedicated ECC Functions\7f114440
+Node: General public-key related Functions\7f115587
+Node: Hashing\7f130620
+Node: Available hash algorithms\7f131353
+Node: Working with hash algorithms\7f137707
+Node: Message Authentication Codes\7f151857
+Node: Available MAC algorithms\7f152525
+Node: Working with MAC algorithms\7f159286
+Node: Key Derivation\7f165278
+Node: Random Numbers\7f167679
+Node: Quality of random numbers\7f167962
+Node: Retrieving random numbers\7f168648
+Node: S-expressions\7f170137
+Node: Data types for S-expressions\7f170780
+Node: Working with S-expressions\7f171106
+Node: MPI library\7f186239
+Node: Data types\7f187261
+Node: Basic functions\7f187570
+Node: MPI formats\7f190591
+Node: Calculations\7f194197
+Node: Comparisons\7f196581
+Node: Bit manipulations\7f197589
+Node: EC functions\7f198911
+Ref: gcry_mpi_ec_new\7f201865
+Node: Miscellaneous\7f207434
+Node: Prime numbers\7f211580
+Node: Generation\7f211850
+Node: Checking\7f213141
+Node: Utilities\7f213551
+Node: Memory allocation\7f213923
+Node: Context management\7f215288
+Ref: gcry_ctx_release\7f215727
+Node: Buffer description\7f215888
+Node: Config reporting\7f216676
+Node: Tools\7f217638
+Node: hmac256\7f217805
+Node: Configuration\7f218810
+Node: Architecture\7f222026
+Ref: fig:subsystems\7f223552
+Ref: Architecture-Footnote-1\7f224640
+Ref: Architecture-Footnote-2\7f224702
+Node: Public-Key Subsystem Architecture\7f224786
+Node: Symmetric Encryption Subsystem Architecture\7f227070
+Node: Hashing and MACing Subsystem Architecture\7f228667
+Node: Multi-Precision-Integer Subsystem Architecture\7f230741
+Node: Prime-Number-Generator Subsystem Architecture\7f232179
+Ref: Prime-Number-Generator Subsystem Architecture-Footnote-1\7f234106
+Node: Random-Number Subsystem Architecture\7f234396
+Node: CSPRNG Description\7f237587
+Ref: CSPRNG Description-Footnote-1\7f239142
+Node: DRBG Description\7f239265
+Node: Self-Tests\7f240946
+Node: FIPS Mode\7f252763
+Ref: fig:fips-fsm\7f256947
+Ref: tbl:fips-states\7f257051
+Ref: tbl:fips-state-transitions\7f258300
+Node: Library Copying\7f261911
+Node: Copying\7f290017
+Node: Figures and Tables\7f310055
+Node: Concept Index\7f310480
+Node: Function and Data Index\7f323105
+\1f
+End Tag Table
+
+\1f
+Local Variables:
+coding: utf-8
+End:
--- /dev/null
+This is gcrypt.info, produced by makeinfo version 6.8 from gcrypt.texi.
+
+This manual is for Libgcrypt version 1.10.3 and was last updated 19
+October 2023. Libgcrypt is GNU's library of cryptographic building
+blocks.
+
+Copyright (C) 2000, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2011, 2012
+Free Software Foundation, Inc.
+Copyright (C) 2012, 2013, 2016, 2017 g10 Code GmbH
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version. The text of the
+ license can be found in the section entitled "GNU General Public
+ License".
+INFO-DIR-SECTION GNU Libraries
+START-INFO-DIR-ENTRY
+* libgcrypt: (gcrypt). Cryptographic function library.
+END-INFO-DIR-ENTRY
+
+\1f
+File: gcrypt.info, Node: Top, Next: Introduction, Up: (dir)
+
+The Libgcrypt Library
+*********************
+
+This manual is for Libgcrypt version 1.10.3 and was last updated 19
+October 2023. Libgcrypt is GNU's library of cryptographic building
+blocks.
+
+Copyright (C) 2000, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2011, 2012
+Free Software Foundation, Inc.
+Copyright (C) 2012, 2013, 2016, 2017 g10 Code GmbH
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version. The text of the
+ license can be found in the section entitled "GNU General Public
+ License".
+
+* Menu:
+
+* Introduction:: What is Libgcrypt.
+* Preparation:: What you should do before using the library.
+* Generalities:: General library functions and data types.
+* Handler Functions:: Working with handler functions.
+* Symmetric cryptography:: How to use symmetric cryptography.
+* Public Key cryptography:: How to use public key cryptography.
+* Hashing:: How to use hash algorithms.
+* Message Authentication Codes:: How to use MAC algorithms.
+* Key Derivation:: How to derive keys from strings
+* Random Numbers:: How to work with random numbers.
+* S-expressions:: How to manage S-expressions.
+* MPI library:: How to work with multi-precision-integers.
+* Prime numbers:: How to use the Prime number related functions.
+* Utilities:: Utility functions.
+* Tools:: Utility tools.
+* Configuration:: Configuration files and environment variables.
+* Architecture:: How Libgcrypt works internally.
+
+Appendices
+
+* Self-Tests:: Description of the self-tests.
+* FIPS Mode:: Description of the FIPS mode.
+* Library Copying:: The GNU Lesser General Public License
+ says how you can copy and share Libgcrypt.
+* Copying:: The GNU General Public License says how you
+ can copy and share some parts of Libgcrypt.
+
+Indices
+
+* Figures and Tables:: Index of figures and tables.
+* Concept Index:: Index of concepts and programs.
+* Function and Data Index:: Index of functions, variables and data types.
+
+\1f
+File: gcrypt.info, Node: Introduction, Next: Preparation, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+Libgcrypt is a library providing cryptographic building blocks.
+
+* Menu:
+
+* Getting Started:: How to use this manual.
+* Features:: A glance at Libgcrypt's features.
+* Overview:: Overview about the library.
+
+\1f
+File: gcrypt.info, Node: Getting Started, Next: Features, Up: Introduction
+
+1.1 Getting Started
+===================
+
+This manual documents the Libgcrypt library application programming
+interface (API). All functions and data types provided by the library
+are explained.
+
+The reader is assumed to possess basic knowledge about applied
+cryptography.
+
+ This manual can be used in several ways. If read from the beginning
+to the end, it gives a good introduction into the library and how it can
+be used in an application. Forward references are included where
+necessary. Later on, the manual can be used as a reference manual to
+get just the information needed about any particular interface of the
+library. Experienced programmers might want to start looking at the
+examples at the end of the manual, and then only read up those parts of
+the interface which are unclear.
+
+\1f
+File: gcrypt.info, Node: Features, Next: Overview, Prev: Getting Started, Up: Introduction
+
+1.2 Features
+============
+
+Libgcrypt might have a couple of advantages over other libraries doing a
+similar job.
+
+It's Free Software
+ Anybody can use, modify, and redistribute it under the terms of the
+ GNU Lesser General Public License (*note Library Copying::). Note,
+ that some parts (which are in general not needed by applications)
+ are subject to the terms of the GNU General Public License (*note
+ Copying::); please see the README file of the distribution for the
+ list of these parts.
+
+It encapsulates the low level cryptography
+ Libgcrypt provides a high level interface to cryptographic building
+ blocks using an extensible and flexible API.
+
+\1f
+File: gcrypt.info, Node: Overview, Prev: Features, Up: Introduction
+
+1.3 Overview
+============
+
+The Libgcrypt library is fully thread-safe, where it makes sense to be
+thread-safe. Not thread-safe are some cryptographic functions that
+modify a certain context stored in handles. If the user really intents
+to use such functions from different threads on the same handle, he has
+to take care of the serialization of such functions himself. If not
+described otherwise, every function is thread-safe.
+
+ Libgcrypt depends on the library 'libgpg-error', which contains some
+common code used by other GnuPG components.
+
+\1f
+File: gcrypt.info, Node: Preparation, Next: Generalities, Prev: Introduction, Up: Top
+
+2 Preparation
+*************
+
+To use Libgcrypt, you have to perform some changes to your sources and
+the build system. The necessary changes are small and explained in the
+following sections. At the end of this chapter, it is described how the
+library is initialized, and how the requirements of the library are
+verified.
+
+* Menu:
+
+* Header:: What header file you need to include.
+* Building sources:: How to build sources using the library.
+* Building sources using Automake:: How to build sources with the help of Automake.
+* Initializing the library:: How to initialize the library.
+* Multi-Threading:: How Libgcrypt can be used in a MT environment.
+* Enabling FIPS mode:: How to enable the FIPS mode.
+* Disabling FIPS mode:: How to disable the FIPS mode.
+* Hardware features:: How to disable hardware features.
+
+\1f
+File: gcrypt.info, Node: Header, Next: Building sources, Up: Preparation
+
+2.1 Header
+==========
+
+All interfaces (data types and functions) of the library are defined in
+the header file 'gcrypt.h'. You must include this in all source files
+using the library, either directly or through some other header file,
+like this:
+
+ #include <gcrypt.h>
+
+ The name space of Libgcrypt is 'gcry_*' for function and type names
+and 'GCRY*' for other symbols. In addition the same name prefixes with
+one prepended underscore are reserved for internal use and should never
+be used by an application. Note that Libgcrypt uses libgpg-error, which
+uses 'gpg_*' as name space for function and type names and 'GPG_*' for
+other symbols, including all the error codes.
+
+Certain parts of gcrypt.h may be excluded by defining these macros:
+
+'GCRYPT_NO_MPI_MACROS'
+ Do not define the shorthand macros 'mpi_*' for 'gcry_mpi_*'.
+
+'GCRYPT_NO_DEPRECATED'
+ Do not include definitions for deprecated features. This is useful
+ to make sure that no deprecated features are used.
+
+\1f
+File: gcrypt.info, Node: Building sources, Next: Building sources using Automake, Prev: Header, Up: Preparation
+
+2.2 Building sources
+====================
+
+If you want to compile a source file including the 'gcrypt.h' header
+file, you must make sure that the compiler can find it in the directory
+hierarchy. This is accomplished by adding the path to the directory in
+which the header file is located to the compilers include file search
+path (via the '-I' option).
+
+ However, the path to the include file is determined at the time the
+source is configured. To solve this problem, Libgcrypt ships with
+'libgcrypt.pc' file, that knows about the path to the include file and
+other configuration options. The options that need to be added to the
+compiler invocation at compile time are output by the '--cflags' option
+to 'pkg-config libgcrypt'. The following example shows how it can be
+used at the command line:
+
+ gcc -c foo.c `pkg-config --cflags libgcrypt`
+
+ Adding the output of 'pkg-config --cflags libgcrypt' to the
+compiler's command line will ensure that the compiler can find the
+Libgcrypt header file.
+
+ A similar problem occurs when linking the program with the library.
+Again, the compiler has to find the library files. For this to work,
+the path to the library files has to be added to the library search path
+(via the '-L' option). For this, the option '--libs' to 'pkg-config
+libgcrypt' can be used. For convenience, this option also outputs all
+other options that are required to link the program with the Libgcrypt
+libraries (in particular, the '-lgcrypt' option). The example shows how
+to link 'foo.o' with the Libgcrypt library to a program 'foo'.
+
+ gcc -o foo foo.o `pkg-config --libs libgcrypt`
+
+ Of course you can also combine both examples to a single command by
+specifying both options to 'pkg-config libgcrypt':
+
+ gcc -o foo foo.c `pkg-config --cflags --libs libgcrypt`
+
+\1f
+File: gcrypt.info, Node: Building sources using Automake, Next: Initializing the library, Prev: Building sources, Up: Preparation
+
+2.3 Building sources using Automake
+===================================
+
+It is much easier if you use GNU Automake instead of writing your own
+Makefiles. If you do that, you do not have to worry about finding and
+invoking the 'pkg-config' script at all.
+
+ You can use 'PKG_CHECK_MODULES' macro, or, libgcrypt also provides an
+extension to Automake that does all the work for you.
+
+ -- Macro: AM_PATH_LIBGCRYPT ([MINIMUM-VERSION], [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ Check whether Libgcrypt (at least version MINIMUM-VERSION, if
+ given) exists on the host system. If it is found, execute
+ ACTION-IF-FOUND, otherwise do ACTION-IF-NOT-FOUND, if given.
+
+ Additionally, the function defines 'LIBGCRYPT_CFLAGS' to the flags
+ needed for compilation of the program to find the 'gcrypt.h' header
+ file, and 'LIBGCRYPT_LIBS' to the linker flags needed to link the
+ program to the Libgcrypt library.
+
+ This macro locates for 'libgcrypt.pc', with cross-compile support.
+
+ You can use the defined Autoconf variables like this in your
+'Makefile.am':
+
+ AM_CPPFLAGS = $(LIBGCRYPT_CFLAGS)
+ LDADD = $(LIBGCRYPT_LIBS)
+
+\1f
+File: gcrypt.info, Node: Initializing the library, Next: Multi-Threading, Prev: Building sources using Automake, Up: Preparation
+
+2.4 Initializing the library
+============================
+
+Before the library can be used, it must initialize itself. This is
+achieved by invoking the function 'gcry_check_version' described below.
+
+ Also, it is often desirable to check that the version of Libgcrypt
+used is indeed one which fits all requirements. Even with binary
+compatibility, new features may have been introduced, but due to problem
+with the dynamic linker an old version may actually be used. So you may
+want to check that the version is okay right after program startup.
+
+ -- Function: const char * gcry_check_version (const char *REQ_VERSION)
+
+ The function 'gcry_check_version' initializes some subsystems used
+ by Libgcrypt and must be invoked before any other function in the
+ library. *Note Multi-Threading::.
+
+ Furthermore, this function returns the version number of the
+ library. It can also verify that the version number is higher than
+ a certain required version number REQ_VERSION, if this value is not
+ a null pointer.
+
+ Libgcrypt uses a concept known as secure memory, which is a region of
+memory set aside for storing sensitive data. Because such memory is a
+scarce resource, it needs to be setup in advanced to a fixed size.
+Further, most operating systems have special requirements on how that
+secure memory can be used. For example, it might be required to install
+an application as "setuid(root)" to allow allocating such memory.
+Libgcrypt requires a sequence of initialization steps to make sure that
+this works correctly. The following examples show the necessary steps.
+
+ If you don't have a need for secure memory, for example if your
+application does not use secret keys or other confidential data or it
+runs in a controlled environment where key material floating around in
+memory is not a problem, you should initialize Libgcrypt this way:
+
+ /* Version check should be the very first call because it
+ makes sure that important subsystems are initialized.
+ #define NEED_LIBGCRYPT_VERSION to the minimum required version. */
+ if (!gcry_check_version (NEED_LIBGCRYPT_VERSION))
+ {
+ fprintf (stderr, "libgcrypt is too old (need %s, have %s)\n",
+ NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL));
+ exit (2);
+ }
+
+ /* Disable secure memory. */
+ gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
+
+ /* ... If required, other initialization goes here. */
+
+ /* Tell Libgcrypt that initialization has completed. */
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
+
+ If you have to protect your keys or other information in memory
+against being swapped out to disk and to enable an automatic overwrite
+of used and freed memory, you need to initialize Libgcrypt this way:
+
+ /* Version check should be the very first call because it
+ makes sure that important subsystems are initialized.
+ #define NEED_LIBGCRYPT_VERSION to the minimum required version. */
+ if (!gcry_check_version (NEED_LIBGCRYPT_VERSION))
+ {
+ fprintf (stderr, "libgcrypt is too old (need %s, have %s)\n",
+ NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL));
+ exit (2);
+ }
+
+ /* We don't want to see any warnings, e.g. because we have not yet
+ parsed program options which might be used to suppress such
+ warnings. */
+ gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
+
+ /* ... If required, other initialization goes here. Note that the
+ process might still be running with increased privileges and that
+ the secure memory has not been initialized. */
+
+ /* Allocate a pool of 16k secure memory. This makes the secure memory
+ available and also drops privileges where needed. Note that by
+ using functions like gcry_xmalloc_secure and gcry_mpi_snew Libgcrypt
+ may expand the secure memory pool with memory which lacks the
+ property of not being swapped out to disk. */
+ gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
+
+ /* It is now okay to let Libgcrypt complain when there was/is
+ a problem with the secure memory. */
+ gcry_control (GCRYCTL_RESUME_SECMEM_WARN);
+
+ /* ... If required, other initialization goes here. */
+
+ /* Tell Libgcrypt that initialization has completed. */
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
+
+ It is important that these initialization steps are not done by a
+library but by the actual application. A library using Libgcrypt might
+want to check for finished initialization using:
+
+ if (!gcry_control (GCRYCTL_INITIALIZATION_FINISHED_P))
+ {
+ fputs ("libgcrypt has not been initialized\n", stderr);
+ abort ();
+ }
+
+ Instead of terminating the process, the library may instead print a
+warning and try to initialize Libgcrypt itself. See also the section on
+multi-threading below for more pitfalls.
+
+\1f
+File: gcrypt.info, Node: Multi-Threading, Next: Enabling FIPS mode, Prev: Initializing the library, Up: Preparation
+
+2.5 Multi-Threading
+===================
+
+As mentioned earlier, the Libgcrypt library is thread-safe if you adhere
+to the following requirements:
+
+ * If you use pthread and your applications forks and does not
+ directly call exec (even calling stdio functions), all kind of
+ problems may occur. Future versions of Libgcrypt will try to
+ cleanup using pthread_atfork but even that may lead to problems.
+ This is a common problem with almost all applications using pthread
+ and fork.
+
+ * The function 'gcry_check_version' must be called before any other
+ function in the library. To achieve this in multi-threaded
+ programs, you must synchronize the memory with respect to other
+ threads that also want to use Libgcrypt. For this, it is
+ sufficient to call 'gcry_check_version' before creating the other
+ threads using Libgcrypt(1).
+
+ * Just like the function 'gpg_strerror', the function 'gcry_strerror'
+ is not thread safe. You have to use 'gpg_strerror_r' instead.
+
+ ---------- Footnotes ----------
+
+ (1) At least this is true for POSIX threads, as 'pthread_create' is a
+function that synchronizes memory with respects to other threads. There
+are many functions which have this property, a complete list can be
+found in POSIX, IEEE Std 1003.1-2003, Base Definitions, Issue 6, in the
+definition of the term "Memory Synchronization". For other thread
+packages, more relaxed or more strict rules may apply.
+
+\1f
+File: gcrypt.info, Node: Enabling FIPS mode, Next: Disabling FIPS mode, Prev: Multi-Threading, Up: Preparation
+
+2.6 How to enable the FIPS mode
+===============================
+
+Libgcrypt may be used in a FIPS 140-3 mode. Note, that this does not
+necessary mean that Libcgrypt is an appoved FIPS 140-3 module. Check
+the NIST database at <http://csrc.nist.gov/groups/STM/cmvp/> to see what
+versions of Libgcrypt are approved.
+
+ Because FIPS 140 has certain restrictions on the use of cryptography
+which are not always wanted, Libgcrypt needs to be put into FIPS mode
+explicitly. Four alternative mechanisms are provided to switch
+Libgcrypt into this mode:
+
+ * If the file '/proc/sys/crypto/fips_enabled' exists and contains a
+ numeric value other than '0', Libgcrypt is put into FIPS mode at
+ initialization time. Obviously this works only on systems with a
+ 'proc' file system (i.e. GNU/Linux).
+
+ * If the file '/etc/gcrypt/fips_enabled' exists, Libgcrypt is put
+ into FIPS mode at initialization time. Note that this filename is
+ hardwired and does not depend on any configuration options.
+
+ * By setting the environment variable 'LIBGCRYPT_FORCE_FIPS_MODE',
+ Libgcrypt is put into FIPS mode at initialization time.
+
+ * If the application requests FIPS mode using the control command
+ 'GCRYCTL_FORCE_FIPS_MODE'. This must be done prior to any
+ initialization (i.e. before 'gcry_check_version').
+
+\1f
+File: gcrypt.info, Node: Disabling FIPS mode, Next: Hardware features, Prev: Enabling FIPS mode, Up: Preparation
+
+2.7 How to disable the FIPS mode
+================================
+
+When the system is configured using libgcrypt in FIPS mode (by file or
+environement variable), but an application wants to use non-FIPS
+features, Libgcrypt needs to be gotten out of FIPS mode. A mechanism is
+provided to switch Libgcrypt into non-FIPS mode:
+
+ * If the application requests non-FIPS mode using the control command
+ 'GCRYCTL_NO_FIPS_MODE'. This must be done prior to any
+ initialization (i.e. before 'gcry_check_version').
+
+\1f
+File: gcrypt.info, Node: Hardware features, Prev: Disabling FIPS mode, Up: Preparation
+
+2.8 How to disable hardware features
+====================================
+
+Libgcrypt makes use of certain hardware features. If the use of a
+feature is not desired, it may be disabled either by a program or
+globally using a configuration file. The currently supported features
+are
+
+'padlock-rng'
+'padlock-aes'
+'padlock-sha'
+'padlock-mmul'
+'intel-cpu'
+'intel-fast-shld'
+'intel-bmi2'
+'intel-ssse3'
+'intel-sse4.1'
+'intel-pclmul'
+'intel-aesni'
+'intel-rdrand'
+'intel-avx'
+'intel-avx2'
+'intel-fast-vpgather'
+'intel-rdtsc'
+'intel-shaext'
+'intel-vaes-vpclmul'
+'arm-neon'
+'arm-aes'
+'arm-sha1'
+'arm-sha2'
+'arm-pmull'
+'ppc-vcrypto'
+'ppc-arch_3_00'
+'ppc-arch_2_07'
+'ppc-arch_3_10'
+'s390x-msa'
+'s390x-msa-4'
+'s390x-msa-8'
+'s390x-msa-9'
+'s390x-vx'
+
+ To disable a feature for all processes using Libgcrypt 1.6 or newer,
+create the file '/etc/gcrypt/hwf.deny' and put each feature not to be
+used on a single line. Empty lines, white space, and lines prefixed
+with a hash mark are ignored. The file should be world readable.
+
+ To disable a feature specifically for a program, that program must
+tell it Libgcrypt before before calling 'gcry_check_version'.
+Example:(1)
+
+ gcry_control (GCRYCTL_DISABLE_HWF, "intel-rdrand", NULL);
+
+To print the list of active features you may use this command:
+
+ mpicalc --print-config | grep ^hwflist: | tr : '\n' | tail -n +2
+
+ ---------- Footnotes ----------
+
+ (1) NB. Libgcrypt uses the RDRAND feature only as one source of
+entropy. A CPU with a broken RDRAND will thus not compromise the random
+number generator
+
+\1f
+File: gcrypt.info, Node: Generalities, Next: Handler Functions, Prev: Preparation, Up: Top
+
+3 Generalities
+**************
+
+* Menu:
+
+* Controlling the library:: Controlling Libgcrypt's behavior.
+* Error Handling:: Error codes and such.
+
+\1f
+File: gcrypt.info, Node: Controlling the library, Next: Error Handling, Up: Generalities
+
+3.1 Controlling the library
+===========================
+
+ -- Function: gcry_error_t gcry_control (enum gcry_ctl_cmds CMD, ...)
+
+ This function can be used to influence the general behavior of
+ Libgcrypt in several ways. Depending on CMD, more arguments can or
+ have to be provided.
+
+ 'GCRYCTL_ENABLE_M_GUARD; Arguments: none'
+ This command enables the built-in memory guard. It must not
+ be used to activate the memory guard after the memory
+ management has already been used; therefore it can ONLY be
+ used before 'gcry_check_version'. Note that the memory guard
+ is NOT used when the user of the library has set his own
+ memory management callbacks.
+
+ 'GCRYCTL_ENABLE_QUICK_RANDOM; Arguments: none'
+ This command inhibits the use the very secure random quality
+ level ('GCRY_VERY_STRONG_RANDOM') and degrades all request
+ down to 'GCRY_STRONG_RANDOM'. In general this is not
+ recommended. However, for some applications the extra quality
+ random Libgcrypt tries to create is not justified and this
+ option may help to get better performance. Please check with
+ a crypto expert whether this option can be used for your
+ application.
+
+ This option can only be used at initialization time.
+
+ 'GCRYCTL_DUMP_RANDOM_STATS; Arguments: none'
+ This command dumps random number generator related statistics
+ to the library's logging stream.
+
+ 'GCRYCTL_DUMP_MEMORY_STATS; Arguments: none'
+ This command dumps memory management related statistics to the
+ library's logging stream.
+
+ 'GCRYCTL_DUMP_SECMEM_STATS; Arguments: none'
+ This command dumps secure memory management related statistics
+ to the library's logging stream.
+
+ 'GCRYCTL_DROP_PRIVS; Arguments: none'
+ This command disables the use of secure memory and drops the
+ privileges of the current process. This command has not much
+ use; the suggested way to disable secure memory is to use
+ 'GCRYCTL_DISABLE_SECMEM' right after initialization.
+
+ 'GCRYCTL_DISABLE_SECMEM; Arguments: none'
+ This command disables the use of secure memory. In FIPS mode
+ this command has no effect at all.
+
+ Many applications do not require secure memory, so they should
+ disable it right away. This command should be executed right
+ after 'gcry_check_version'.
+
+ 'GCRYCTL_DISABLE_LOCKED_SECMEM; Arguments: none'
+ This command disables the use of the mlock call for secure
+ memory. Disabling the use of mlock may for example be done if
+ an encrypted swap space is in use. This command should be
+ executed right after 'gcry_check_version'. Note that by using
+ functions like 'gcry_xmalloc_secure' and 'gcry_mpi_snew'
+ Libgcrypt may expand the secure memory pool with memory which
+ lacks the property of not being swapped out to disk (but will
+ still be zeroed out on free).
+
+ 'GCRYCTL_DISABLE_PRIV_DROP; Arguments: none'
+ This command sets a global flag to tell the secure memory
+ subsystem that it shall not drop privileges after secure
+ memory has been allocated. This command is commonly used
+ right after 'gcry_check_version' but may also be used right
+ away at program startup. It won't have an effect after the
+ secure memory pool has been initialized. WARNING: A process
+ running setuid(root) is a severe security risk. Processes
+ making use of Libgcrypt or other complex code should drop
+ these extra privileges as soon as possible. If this command
+ has been used the caller is responsible for dropping the
+ privileges.
+
+ 'GCRYCTL_INIT_SECMEM; Arguments: unsigned int nbytes'
+ This command is used to allocate a pool of secure memory and
+ thus enabling the use of secure memory. It also drops all
+ extra privileges the process has (i.e. if it is run as setuid
+ (root)). If the argument NBYTES is 0, secure memory will be
+ disabled. The minimum amount of secure memory allocated is
+ currently 16384 bytes; you may thus use a value of 1 to
+ request that default size.
+
+ 'GCRYCTL_AUTO_EXPAND_SECMEM; Arguments: unsigned int chunksize'
+ This command enables on-the-fly expanding of the secure memory
+ area. Note that by using functions like 'gcry_xmalloc_secure'
+ and 'gcry_mpi_snew' will do this auto expanding anyway. The
+ argument to this option is the suggested size for new secure
+ memory areas. A larger size improves performance of all
+ memory allocation and releasing functions. The given
+ chunksize is rounded up to the next 32KiB. The drawback of
+ auto expanding is that memory might be swapped out to disk;
+ this can be fixed by configuring the system to use an
+ encrypted swap space.
+
+ 'GCRYCTL_TERM_SECMEM; Arguments: none'
+ This command zeroises the secure memory and destroys the
+ handler. The secure memory pool may not be used anymore after
+ running this command. If the secure memory pool has already
+ been destroyed, this command has no effect. Applications
+ might want to run this command from their exit handler to make
+ sure that the secure memory gets properly destroyed. This
+ command is not necessarily thread-safe but that should not be
+ needed in cleanup code. It may be called from a signal
+ handler.
+
+ 'GCRYCTL_DISABLE_SECMEM_WARN; Arguments: none'
+ Disable warning messages about problems with the secure memory
+ subsystem. This command should be run right after
+ 'gcry_check_version'.
+
+ 'GCRYCTL_SUSPEND_SECMEM_WARN; Arguments: none'
+ Postpone warning messages from the secure memory subsystem.
+ *Note the initialization example: sample-use-suspend-secmem,
+ on how to use it.
+
+ 'GCRYCTL_RESUME_SECMEM_WARN; Arguments: none'
+ Resume warning messages from the secure memory subsystem.
+ *Note the initialization example: sample-use-resume-secmem, on
+ how to use it.
+
+ 'GCRYCTL_USE_SECURE_RNDPOOL; Arguments: none'
+ This command tells the PRNG to store random numbers in secure
+ memory. This command should be run right after
+ 'gcry_check_version' and not later than the command
+ GCRYCTL_INIT_SECMEM. Note that in FIPS mode the secure memory
+ is always used.
+
+ 'GCRYCTL_SET_RANDOM_SEED_FILE; Arguments: const char *filename'
+ This command specifies the file, which is to be used as seed
+ file for the PRNG. If the seed file is registered prior to
+ initialization of the PRNG, the seed file's content (if it
+ exists and seems to be valid) is fed into the PRNG pool.
+ After the seed file has been registered, the PRNG can be
+ signalled to write out the PRNG pool's content into the seed
+ file with the following command.
+
+ 'GCRYCTL_UPDATE_RANDOM_SEED_FILE; Arguments: none'
+ Write out the PRNG pool's content into the registered seed
+ file.
+
+ Multiple instances of the applications sharing the same random
+ seed file can be started in parallel, in which case they will
+ read out the same pool and then race for updating it (the last
+ update overwrites earlier updates). They will differentiate
+ only by the weak entropy that is added in read_seed_file based
+ on the PID and clock, and up to 16 bytes of weak random
+ non-blockingly. The consequence is that the output of these
+ different instances is correlated to some extent. In a
+ perfect attack scenario, the attacker can control (or at least
+ guess) the PID and clock of the application, and drain the
+ system's entropy pool to reduce the "up to 16 bytes" above to
+ 0. Then the dependencies of the initial states of the pools
+ are completely known. Note that this is not an issue if
+ random of 'GCRY_VERY_STRONG_RANDOM' quality is requested, as
+ in this case enough extra entropy gets mixed. It is also not
+ an issue when using rndgetentropy or rndoldlinux module,
+ because the module guarantees to read full 16 bytes and thus
+ there is no way for an attacker without kernel access to
+ control these 16 bytes.
+
+ 'GCRYCTL_CLOSE_RANDOM_DEVICE; Arguments: none'
+ Try to close the random device. If on Unix system you call
+ fork(), the child process does no call exec(), and you do not
+ intend to use Libgcrypt in the child, it might be useful to
+ use this control code to close the inherited file descriptors
+ of the random device. If Libgcrypt is later used again by the
+ child, the device will be re-opened. On non-Unix systems this
+ control code is ignored.
+
+ 'GCRYCTL_SET_VERBOSITY; Arguments: int level'
+ This command sets the verbosity of the logging. A level of 0
+ disables all extra logging, whereas positive numbers enable
+ more verbose logging. The level may be changed at any time
+ but be aware that no memory synchronization is done so the
+ effect of this command might not immediately show up in other
+ threads. This command may even be used prior to
+ 'gcry_check_version'.
+
+ 'GCRYCTL_SET_DEBUG_FLAGS; Arguments: unsigned int flags'
+ Set the debug flag bits as given by the argument. Be aware
+ that no memory synchronization is done so the effect of this
+ command might not immediately show up in other threads. The
+ debug flags are not considered part of the API and thus may
+ change without notice. As of now bit 0 enables debugging of
+ cipher functions and bit 1 debugging of
+ multi-precision-integers. This command may even be used prior
+ to 'gcry_check_version'.
+
+ 'GCRYCTL_CLEAR_DEBUG_FLAGS; Arguments: unsigned int flags'
+ Set the debug flag bits as given by the argument. Be aware
+ that that no memory synchronization is done so the effect of
+ this command might not immediately show up in other threads.
+ This command may even be used prior to 'gcry_check_version'.
+
+ 'GCRYCTL_DISABLE_INTERNAL_LOCKING; Arguments: none'
+ This command does nothing. It exists only for backward
+ compatibility.
+
+ 'GCRYCTL_ANY_INITIALIZATION_P; Arguments: none'
+ This command returns true if the library has been basically
+ initialized. Such a basic initialization happens implicitly
+ with many commands to get certain internal subsystems running.
+ The common and suggested way to do this basic initialization
+ is by calling 'gcry_check_version'.
+
+ 'GCRYCTL_INITIALIZATION_FINISHED; Arguments: none'
+ This command tells the library that the application has
+ finished the initialization.
+
+ 'GCRYCTL_INITIALIZATION_FINISHED_P; Arguments: none'
+ This command returns true if the command
+ 'GCRYCTL_INITIALIZATION_FINISHED' has already been run.
+
+ 'GCRYCTL_SET_THREAD_CBS; Arguments: struct ath_ops *ath_ops'
+ This command is obsolete since version 1.6.
+
+ 'GCRYCTL_FAST_POLL; Arguments: none'
+ Run a fast random poll.
+
+ 'GCRYCTL_SET_RNDEGD_SOCKET; Arguments: const char *filename'
+ This command may be used to override the default name of the
+ EGD socket to connect to. It may be used only during
+ initialization as it is not thread safe. Changing the socket
+ name again is not supported. The function may return an error
+ if the given filename is too long for a local socket name.
+
+ EGD is an alternative random gatherer, used only on systems
+ lacking a proper random device.
+
+ 'GCRYCTL_PRINT_CONFIG; Arguments: FILE *stream'
+ This command dumps information pertaining to the configuration
+ of the library to the given stream. If 'NULL' is given for
+ STREAM, the log system is used. This command may be used
+ before the initialization has been finished but not before a
+ 'gcry_check_version'. Note that the macro 'estream_t' can be
+ used instead of 'gpgrt_stream_t'.
+
+ 'GCRYCTL_OPERATIONAL_P; Arguments: none'
+ This command returns true if the library is in an operational
+ state. This information makes sense only in FIPS mode. In
+ contrast to other functions, this is a pure test function and
+ won't put the library into FIPS mode or change the internal
+ state. This command may be used before the initialization has
+ been finished but not before a 'gcry_check_version'.
+
+ 'GCRYCTL_FIPS_MODE_P; Arguments: none'
+ This command returns true if the library is in FIPS mode.
+ Note, that this is no indication about the current state of
+ the library. This command may be used before the
+ initialization has been finished but not before a
+ 'gcry_check_version'. An application may use this command or
+ the convenience macro below to check whether FIPS mode is
+ actually active.
+
+ -- Function: int gcry_fips_mode_active (void)
+
+ Returns true if the FIPS mode is active. Note that this
+ is implemented as a macro.
+
+ 'GCRYCTL_FORCE_FIPS_MODE; Arguments: none'
+ Running this command puts the library into FIPS mode. If the
+ library is already in FIPS mode, a self-test is triggered and
+ thus the library will be put into operational state. This
+ command may be used before a call to 'gcry_check_version' and
+ that is actually the recommended way to let an application
+ switch the library into FIPS mode. Note that Libgcrypt will
+ reject an attempt to switch to FIPS mode during or after the
+ initialization.
+
+ 'GCRYCTL_NO_FIPS_MODE; Arguments: none'
+ Running this command puts the library into non-FIPS mode.
+ This command may be used before a call to 'gcry_check_version'
+ and that is actually the recommended way to let an application
+ switch the library into non-FIPS mode. Note that Libgcrypt
+ will reject an attempt to switch to non-FIPS mode during or
+ after the initialization.
+
+ 'GCRYCTL_SET_ENFORCED_FIPS_FLAG; Arguments: none'
+ This command is obsolete and has no effect; do not use it.
+
+ 'GCRYCTL_SET_PREFERRED_RNG_TYPE; Arguments: int'
+ These are advisory commands to select a certain random number
+ generator. They are only advisory because libraries may not
+ know what an application actually wants or vice versa. Thus
+ Libgcrypt employs a priority check to select the actually used
+ RNG. If an applications selects a lower priority RNG but a
+ library requests a higher priority RNG, Libgcrypt will switch
+ to the higher priority RNG. Applications and libraries should
+ use these control codes before 'gcry_check_version'. The
+ available generators are:
+ 'GCRY_RNG_TYPE_STANDARD'
+ A conservative standard generator based on the
+ "Continuously Seeded Pseudo Random Number Generator"
+ designed by Peter Gutmann.
+ 'GCRY_RNG_TYPE_FIPS'
+ A deterministic random number generator conforming to the
+ document "NIST-Recommended Random Number Generator Based
+ on ANSI X9.31 Appendix A.2.4 Using the 3-Key Triple DES
+ and AES Algorithms" (2005-01-31). This implementation
+ uses the AES variant.
+ 'GCRY_RNG_TYPE_SYSTEM'
+ A wrapper around the system's native RNG. On Unix system
+ these are usually the /dev/random and /dev/urandom
+ devices.
+ The default is 'GCRY_RNG_TYPE_STANDARD' unless FIPS mode as
+ been enabled; in which case 'GCRY_RNG_TYPE_FIPS' is used and
+ locked against further changes.
+
+ 'GCRYCTL_GET_CURRENT_RNG_TYPE; Arguments: int *'
+ This command stores the type of the currently used RNG as an
+ integer value at the provided address.
+
+ 'GCRYCTL_SELFTEST; Arguments: none'
+ This may be used at anytime to have the library run all
+ implemented self-tests. It works in standard and in FIPS
+ mode. Returns 0 on success or an error code on failure.
+
+ 'GCRYCTL_DISABLE_HWF; Arguments: const char *name'
+
+ Libgcrypt detects certain features of the CPU at startup time.
+ For performance tests it is sometimes required not to use such
+ a feature. This option may be used to disable a certain
+ feature; i.e. Libgcrypt behaves as if this feature has not
+ been detected. This call can be used several times to disable
+ a set of features, or features may be given as a colon or
+ comma delimited string. The special feature "all" can be used
+ to disable all available features.
+
+ Note that the detection code might be run if the feature has
+ been disabled. This command must be used at initialization
+ time; i.e. before calling 'gcry_check_version'.
+
+ 'GCRYCTL_REINIT_SYSCALL_CLAMP; Arguments: none'
+
+ Libgcrypt wraps blocking system calls with two functions calls
+ ("system call clamp") to give user land threading libraries a
+ hook for re-scheduling. This works by reading the system call
+ clamp from Libgpg-error at initialization time. However
+ sometimes Libgcrypt needs to be initialized before the user
+ land threading systems and at that point the system call clamp
+ has not been registered with Libgpg-error and in turn
+ Libgcrypt would not use them. The control code can be used to
+ tell Libgcrypt that a system call clamp has now been
+ registered with Libgpg-error and advise Libgcrypt to read the
+ clamp again. Obviously this control code may only be used
+ before a second thread is started in a process.
+
+ 'GCRYCTL_FIPS_SERVICE_INDICATOR_CIPHER; Arguments: enum gcry_cipher_algos [, enum gcry_cipher_modes]'
+
+ Check if the given symmetric cipher and optional cipher mode
+ combination is approved under the current FIPS 140-3
+ certification. If the combination is approved, this function
+ returns 'GPG_ERR_NO_ERROR'. Otherwise 'GPG_ERR_NOT_SUPPORTED'
+ is returned.
+
+ 'GCRYCTL_FIPS_SERVICE_INDICATOR_KDF; Arguments: enum gcry_kdf_algos'
+
+ Check if the given KDF is approved under the current FIPS
+ 140-3 certification. If the KDF is approved, this function
+ returns 'GPG_ERR_NO_ERROR'. Otherwise 'GPG_ERR_NOT_SUPPORTED'
+ is returned.
+
+ 'GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION; Arguments: const char *'
+
+ Check if the given function is approved under the current FIPS
+ 140-3 certification. If the function is approved, this
+ function returns 'GPG_ERR_NO_ERROR' (other restrictions might
+ still apply). Otherwise 'GPG_ERR_NOT_SUPPORTED' is returned.
+
+ 'GCRYCTL_FIPS_SERVICE_INDICATOR_MAC; Arguments: enum gcry_mac_algos'
+
+ Check if the given MAC is approved under the current FIPS
+ 140-3 certification. If the MAC is approved, this function
+ returns 'GPG_ERR_NO_ERROR'. Otherwise 'GPG_ERR_NOT_SUPPORTED'
+ is returned.
+
+ 'GCRYCTL_FIPS_SERVICE_INDICATOR_MD; Arguments: enum gcry_md_algos'
+
+ Check if the given message digest algorithm is approved under
+ the current FIPS 140-3 certification. If the algorithm is
+ approved, this function returns 'GPG_ERR_NO_ERROR'. Otherwise
+ 'GPG_ERR_NOT_SUPPORTED' is returned.
+
+ 'GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS; Arguments: const char *'
+
+ Check if the given public key operation flag or s-expression
+ object name is approved under the current FIPS 140-3
+ certification. If the flag is approved, this function returns
+ 'GPG_ERR_NO_ERROR'.
+
+ Otherwise 'GPG_ERR_NOT_SUPPORTED' is returned.
+
+ For compound s-expression objects, if the object name is
+ allowed, the user is responsible to check also the internal
+ members. For example:
+
+ gcry_sexp_t s_sig = NULL;
+ gcry_md_hd_t hd = NULL;
+ gcry_sexp_t s_sk = NULL;
+ const char *data_tmpl = "(data(flags pss)(hash %s %b)(salt-length 1:0))";
+
+ if (err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION, "gcry_md_open") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_MD, GCRY_MD_SHA512) &&
+ err = gcry_md_open (&hd, GCRY_MD_SHA512, 0))
+ {
+ printf ("gcry_md_open failed: %s", gpg_strerror (err));
+ return;
+ }
+ gcry_md_write (hd, buffer, buflen);
+
+ /* initialize the key in s_sk */
+
+ if (err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION, "gcry_pk_hash_sign") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "data") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "flags") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "pss") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "hash") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "salt-length")
+ err = gcry_pk_hash_sign (&s_sig, data_tmpl, s_sk, hd, NULL))
+ {
+ printf ("gcry_pk_hash_sign failed: %s", gpg_strerror (err));
+ return;
+ }
+ /* ok */
+
+\1f
+File: gcrypt.info, Node: Error Handling, Prev: Controlling the library, Up: Generalities
+
+3.2 Error Handling
+==================
+
+Many functions in Libgcrypt can return an error if they fail. For this
+reason, the application should always catch the error condition and take
+appropriate measures, for example by releasing the resources and passing
+the error up to the caller, or by displaying a descriptive message to
+the user and cancelling the operation.
+
+ Some error values do not indicate a system error or an error in the
+operation, but the result of an operation that failed properly. For
+example, if you try to decrypt a tampered message, the decryption will
+fail. Another error value actually means that the end of a data buffer
+or list has been reached. The following descriptions explain for many
+error codes what they mean usually. Some error values have specific
+meanings if returned by a certain functions. Such cases are described
+in the documentation of those functions.
+
+ Libgcrypt uses the 'libgpg-error' library. This allows to share the
+error codes with other components of the GnuPG system, and to pass error
+values transparently from the crypto engine, or some helper application
+of the crypto engine, to the user. This way no information is lost. As
+a consequence, Libgcrypt does not use its own identifiers for error
+codes, but uses those provided by 'libgpg-error'. They usually start
+with 'GPG_ERR_'.
+
+ However, Libgcrypt does provide aliases for the functions defined in
+libgpg-error, which might be preferred for name space consistency.
+
+ Most functions in Libgcrypt return an error code in the case of
+failure. For this reason, the application should always catch the error
+condition and take appropriate measures, for example by releasing the
+resources and passing the error up to the caller, or by displaying a
+descriptive message to the user and canceling the operation.
+
+ Some error values do not indicate a system error or an error in the
+operation, but the result of an operation that failed properly.
+
+ GnuPG components, including Libgcrypt, use an extra library named
+libgpg-error to provide a common error handling scheme. For more
+information on libgpg-error, see the according manual.
+
+* Menu:
+
+* Error Values:: The error value and what it means.
+* Error Sources:: A list of important error sources.
+* Error Codes:: A list of important error codes.
+* Error Strings:: How to get a descriptive string from a value.
+
+\1f
+File: gcrypt.info, Node: Error Values, Next: Error Sources, Up: Error Handling
+
+3.2.1 Error Values
+------------------
+
+ -- Data type: gcry_err_code_t
+ The 'gcry_err_code_t' type is an alias for the 'libgpg-error' type
+ 'gpg_err_code_t'. The error code indicates the type of an error,
+ or the reason why an operation failed.
+
+ A list of important error codes can be found in the next section.
+
+ -- Data type: gcry_err_source_t
+ The 'gcry_err_source_t' type is an alias for the 'libgpg-error'
+ type 'gpg_err_source_t'. The error source has not a precisely
+ defined meaning. Sometimes it is the place where the error
+ happened, sometimes it is the place where an error was encoded into
+ an error value. Usually the error source will give an indication
+ to where to look for the problem. This is not always true, but it
+ is attempted to achieve this goal.
+
+ A list of important error sources can be found in the next section.
+
+ -- Data type: gcry_error_t
+ The 'gcry_error_t' type is an alias for the 'libgpg-error' type
+ 'gpg_error_t'. An error value like this has always two components:
+ an error code and an error source. Both together form the error
+ value.
+
+ Thus, the error value can not be directly compared against an error
+ code, but the accessor functions described below must be used.
+ However, it is guaranteed that only 0 is used to indicate success
+ ('GPG_ERR_NO_ERROR'), and that in this case all other parts of the
+ error value are set to 0, too.
+
+ Note that in Libgcrypt, the error source is used purely for
+ diagnostic purposes. Only the error code should be checked to test
+ for a certain outcome of a function. The manual only documents the
+ error code part of an error value. The error source is left
+ unspecified and might be anything.
+
+ -- Function: gcry_err_code_t gcry_err_code (gcry_error_t ERR)
+ The static inline function 'gcry_err_code' returns the
+ 'gcry_err_code_t' component of the error value ERR. This function
+ must be used to extract the error code from an error value in order
+ to compare it with the 'GPG_ERR_*' error code macros.
+
+ -- Function: gcry_err_source_t gcry_err_source (gcry_error_t ERR)
+ The static inline function 'gcry_err_source' returns the
+ 'gcry_err_source_t' component of the error value ERR. This
+ function must be used to extract the error source from an error
+ value in order to compare it with the 'GPG_ERR_SOURCE_*' error
+ source macros.
+
+ -- Function: gcry_error_t gcry_err_make (gcry_err_source_t SOURCE,
+ gcry_err_code_t CODE)
+ The static inline function 'gcry_err_make' returns the error value
+ consisting of the error source SOURCE and the error code CODE.
+
+ This function can be used in callback functions to construct an
+ error value to return it to the library.
+
+ -- Function: gcry_error_t gcry_error (gcry_err_code_t CODE)
+ The static inline function 'gcry_error' returns the error value
+ consisting of the default error source and the error code CODE.
+
+ For GCRY applications, the default error source is
+ 'GPG_ERR_SOURCE_USER_1'. You can define 'GCRY_ERR_SOURCE_DEFAULT'
+ before including 'gcrypt.h' to change this default.
+
+ This function can be used in callback functions to construct an
+ error value to return it to the library.
+
+ The 'libgpg-error' library provides error codes for all system error
+numbers it knows about. If ERR is an unknown error number, the error
+code 'GPG_ERR_UNKNOWN_ERRNO' is used. The following functions can be
+used to construct error values from system errno numbers.
+
+ -- Function: gcry_error_t gcry_err_make_from_errno
+ (gcry_err_source_t SOURCE, int ERR)
+ The function 'gcry_err_make_from_errno' is like 'gcry_err_make',
+ but it takes a system error like 'errno' instead of a
+ 'gcry_err_code_t' error code.
+
+ -- Function: gcry_error_t gcry_error_from_errno (int ERR)
+ The function 'gcry_error_from_errno' is like 'gcry_error', but it
+ takes a system error like 'errno' instead of a 'gcry_err_code_t'
+ error code.
+
+ Sometimes you might want to map system error numbers to error codes
+directly, or map an error code representing a system error back to the
+system error number. The following functions can be used to do that.
+
+ -- Function: gcry_err_code_t gcry_err_code_from_errno (int ERR)
+ The function 'gcry_err_code_from_errno' returns the error code for
+ the system error ERR. If ERR is not a known system error, the
+ function returns 'GPG_ERR_UNKNOWN_ERRNO'.
+
+ -- Function: int gcry_err_code_to_errno (gcry_err_code_t ERR)
+ The function 'gcry_err_code_to_errno' returns the system error for
+ the error code ERR. If ERR is not an error code representing a
+ system error, or if this system error is not defined on this
+ system, the function returns '0'.
+
+\1f
+File: gcrypt.info, Node: Error Sources, Next: Error Codes, Prev: Error Values, Up: Error Handling
+
+3.2.2 Error Sources
+-------------------
+
+The library 'libgpg-error' defines an error source for every component
+of the GnuPG system. The error source part of an error value is not
+well defined. As such it is mainly useful to improve the diagnostic
+error message for the user.
+
+ If the error code part of an error value is '0', the whole error
+value will be '0'. In this case the error source part is of course
+'GPG_ERR_SOURCE_UNKNOWN'.
+
+ The list of error sources that might occur in applications using
+Libgcrypt is:
+
+'GPG_ERR_SOURCE_UNKNOWN'
+ The error source is not known. The value of this error source is
+ '0'.
+
+'GPG_ERR_SOURCE_GPGME'
+ The error source is GPGME itself.
+
+'GPG_ERR_SOURCE_GPG'
+ The error source is GnuPG, which is the crypto engine used for the
+ OpenPGP protocol.
+
+'GPG_ERR_SOURCE_GPGSM'
+ The error source is GPGSM, which is the crypto engine used for the
+ OpenPGP protocol.
+
+'GPG_ERR_SOURCE_GCRYPT'
+ The error source is 'libgcrypt', which is used by crypto engines to
+ perform cryptographic operations.
+
+'GPG_ERR_SOURCE_GPGAGENT'
+ The error source is 'gpg-agent', which is used by crypto engines to
+ perform operations with the secret key.
+
+'GPG_ERR_SOURCE_PINENTRY'
+ The error source is 'pinentry', which is used by 'gpg-agent' to
+ query the passphrase to unlock a secret key.
+
+'GPG_ERR_SOURCE_SCD'
+ The error source is the SmartCard Daemon, which is used by
+ 'gpg-agent' to delegate operations with the secret key to a
+ SmartCard.
+
+'GPG_ERR_SOURCE_KEYBOX'
+ The error source is 'libkbx', a library used by the crypto engines
+ to manage local keyrings.
+
+'GPG_ERR_SOURCE_USER_1'
+'GPG_ERR_SOURCE_USER_2'
+'GPG_ERR_SOURCE_USER_3'
+'GPG_ERR_SOURCE_USER_4'
+ These error sources are not used by any GnuPG component and can be
+ used by other software. For example, applications using Libgcrypt
+ can use them to mark error values coming from callback handlers.
+ Thus 'GPG_ERR_SOURCE_USER_1' is the default for errors created with
+ 'gcry_error' and 'gcry_error_from_errno', unless you define
+ 'GCRY_ERR_SOURCE_DEFAULT' before including 'gcrypt.h'.
+
+\1f
+File: gcrypt.info, Node: Error Codes, Next: Error Strings, Prev: Error Sources, Up: Error Handling
+
+3.2.3 Error Codes
+-----------------
+
+The library 'libgpg-error' defines many error values. The following
+list includes the most important error codes.
+
+'GPG_ERR_EOF'
+ This value indicates the end of a list, buffer or file.
+
+'GPG_ERR_NO_ERROR'
+ This value indicates success. The value of this error code is '0'.
+ Also, it is guaranteed that an error value made from the error code
+ '0' will be '0' itself (as a whole). This means that the error
+ source information is lost for this error code, however, as this
+ error code indicates that no error occurred, this is generally not
+ a problem.
+
+'GPG_ERR_GENERAL'
+ This value means that something went wrong, but either there is not
+ enough information about the problem to return a more useful error
+ value, or there is no separate error value for this type of
+ problem.
+
+'GPG_ERR_ENOMEM'
+ This value means that an out-of-memory condition occurred.
+
+'GPG_ERR_E...'
+ System errors are mapped to GPG_ERR_EFOO where FOO is the symbol
+ for the system error.
+
+'GPG_ERR_INV_VALUE'
+ This value means that some user provided data was out of range.
+
+'GPG_ERR_UNUSABLE_PUBKEY'
+ This value means that some recipients for a message were invalid.
+
+'GPG_ERR_UNUSABLE_SECKEY'
+ This value means that some signers were invalid.
+
+'GPG_ERR_NO_DATA'
+ This value means that data was expected where no data was found.
+
+'GPG_ERR_CONFLICT'
+ This value means that a conflict of some sort occurred.
+
+'GPG_ERR_NOT_IMPLEMENTED'
+ This value indicates that the specific function (or operation) is
+ not implemented. This error should never happen. It can only
+ occur if you use certain values or configuration options which do
+ not work, but for which we think that they should work at some
+ later time.
+
+'GPG_ERR_DECRYPT_FAILED'
+ This value indicates that a decryption operation was unsuccessful.
+
+'GPG_ERR_WRONG_KEY_USAGE'
+ This value indicates that a key is not used appropriately.
+
+'GPG_ERR_NO_SECKEY'
+ This value indicates that no secret key for the user ID is
+ available.
+
+'GPG_ERR_UNSUPPORTED_ALGORITHM'
+ This value means a verification failed because the cryptographic
+ algorithm is not supported by the crypto backend.
+
+'GPG_ERR_BAD_SIGNATURE'
+ This value means a verification failed because the signature is
+ bad.
+
+'GPG_ERR_NO_PUBKEY'
+ This value means a verification failed because the public key is
+ not available.
+
+'GPG_ERR_NOT_OPERATIONAL'
+ This value means that the library is not yet in state which allows
+ to use this function. This error code is in particular returned if
+ Libgcrypt is operated in FIPS mode and the internal state of the
+ library does not yet or not anymore allow the use of a service.
+
+ This error code is only available with newer libgpg-error versions,
+ thus you might see "invalid error code" when passing this to
+ 'gpg_strerror'. The numeric value of this error code is 176.
+
+'GPG_ERR_USER_1'
+'GPG_ERR_USER_2'
+'...'
+'GPG_ERR_USER_16'
+ These error codes are not used by any GnuPG component and can be
+ freely used by other software. Applications using Libgcrypt might
+ use them to mark specific errors returned by callback handlers if
+ no suitable error codes (including the system errors) for these
+ errors exist already.
+
+\1f
+File: gcrypt.info, Node: Error Strings, Prev: Error Codes, Up: Error Handling
+
+3.2.4 Error Strings
+-------------------
+
+ -- Function: const char * gcry_strerror (gcry_error_t ERR)
+ The function 'gcry_strerror' returns a pointer to a statically
+ allocated string containing a description of the error code
+ contained in the error value ERR. This string can be used to
+ output a diagnostic message to the user.
+
+ -- Function: const char * gcry_strsource (gcry_error_t ERR)
+ The function 'gcry_strsource' returns a pointer to a statically
+ allocated string containing a description of the error source
+ contained in the error value ERR. This string can be used to
+ output a diagnostic message to the user.
+
+ The following example illustrates the use of the functions described
+above:
+
+ {
+ gcry_cipher_hd_t handle;
+ gcry_error_t err = 0;
+
+ err = gcry_cipher_open (&handle, GCRY_CIPHER_AES,
+ GCRY_CIPHER_MODE_CBC, 0);
+ if (err)
+ {
+ fprintf (stderr, "Failure: %s/%s\n",
+ gcry_strsource (err),
+ gcry_strerror (err));
+ }
+ }
+
+\1f
+File: gcrypt.info, Node: Handler Functions, Next: Symmetric cryptography, Prev: Generalities, Up: Top
+
+4 Handler Functions
+*******************
+
+Libgcrypt makes it possible to install so called 'handler functions',
+which get called by Libgcrypt in case of certain events.
+
+* Menu:
+
+* Progress handler:: Using a progress handler function.
+* Allocation handler:: Using special memory allocation functions.
+* Error handler:: Using error handler functions.
+* Logging handler:: Using a special logging function.
+
+\1f
+File: gcrypt.info, Node: Progress handler, Next: Allocation handler, Up: Handler Functions
+
+4.1 Progress handler
+====================
+
+It is often useful to retrieve some feedback while long running
+operations are performed.
+
+ -- Data type: gcry_handler_progress_t
+ Progress handler functions have to be of the type
+ 'gcry_handler_progress_t', which is defined as:
+
+ 'void (*gcry_handler_progress_t) (void *, const char *, int, int,
+ int)'
+
+ The following function may be used to register a handler function for
+this purpose.
+
+ -- Function: void gcry_set_progress_handler (gcry_handler_progress_t
+ CB, void *CB_DATA)
+
+ This function installs CB as the 'Progress handler' function. It
+ may be used only during initialization. CB must be defined as
+ follows:
+
+ void
+ my_progress_handler (void *CB_DATA, const char *WHAT,
+ int PRINTCHAR, int CURRENT, int TOTAL)
+ {
+ /* Do something. */
+ }
+
+ A description of the arguments of the progress handler function
+ follows.
+
+ CB_DATA
+ The argument provided in the call to
+ 'gcry_set_progress_handler'.
+ WHAT
+ A string identifying the type of the progress output. The
+ following values for WHAT are defined:
+
+ 'need_entropy'
+ Not enough entropy is available. TOTAL holds the number
+ of required bytes.
+
+ 'wait_dev_random'
+ Waiting to re-open a random device. TOTAL gives the
+ number of seconds until the next try.
+
+ 'primegen'
+ Values for PRINTCHAR:
+ '\n'
+ Prime generated.
+ '!'
+ Need to refresh the pool of prime numbers.
+ '<, >'
+ Number of bits adjusted.
+ '^'
+ Searching for a generator.
+ '.'
+ Fermat test on 10 candidates failed.
+ ':'
+ Restart with a new random value.
+ '+'
+ Rabin-Miller test passed.
+
+\1f
+File: gcrypt.info, Node: Allocation handler, Next: Error handler, Prev: Progress handler, Up: Handler Functions
+
+4.2 Allocation handler
+======================
+
+It is possible to make Libgcrypt use special memory allocation functions
+instead of the built-in ones.
+
+ Memory allocation functions are of the following types:
+ -- Data type: gcry_handler_alloc_t
+ This type is defined as: 'void *(*gcry_handler_alloc_t) (size_t
+ n)'.
+ -- Data type: gcry_handler_secure_check_t
+ This type is defined as: 'int *(*gcry_handler_secure_check_t)
+ (const void *)'.
+ -- Data type: gcry_handler_realloc_t
+ This type is defined as: 'void *(*gcry_handler_realloc_t) (void *p,
+ size_t n)'.
+ -- Data type: gcry_handler_free_t
+ This type is defined as: 'void *(*gcry_handler_free_t) (void *)'.
+
+ Special memory allocation functions can be installed with the
+following function:
+
+ -- Function: void gcry_set_allocation_handler (gcry_handler_alloc_t
+ FUNC_ALLOC, gcry_handler_alloc_t FUNC_ALLOC_SECURE,
+ gcry_handler_secure_check_t FUNC_SECURE_CHECK,
+ gcry_handler_realloc_t FUNC_REALLOC, gcry_handler_free_t
+ FUNC_FREE)
+ Install the provided functions and use them instead of the built-in
+ functions for doing memory allocation. Using this function is in
+ general not recommended because the standard Libgcrypt allocation
+ functions are guaranteed to zeroize memory if needed.
+
+ This function may be used only during initialization and may not be
+ used in FIPS mode.
+
+\1f
+File: gcrypt.info, Node: Error handler, Next: Logging handler, Prev: Allocation handler, Up: Handler Functions
+
+4.3 Error handler
+=================
+
+The following functions may be used to register handler functions that
+are called by Libgcrypt in case certain error conditions occur. They
+may and should be registered prior to calling 'gcry_check_version'.
+
+ -- Data type: gcry_handler_no_mem_t
+ This type is defined as: 'int (*gcry_handler_no_mem_t) (void *,
+ size_t, unsigned int)'
+ -- Function: void gcry_set_outofcore_handler (gcry_handler_no_mem_t
+ FUNC_NO_MEM, void *CB_DATA)
+ This function registers FUNC_NO_MEM as 'out-of-core handler', which
+ means that it will be called in the case of not having enough
+ memory available. The handler is called with 3 arguments: The
+ first one is the pointer CB_DATA as set with this function, the
+ second is the requested memory size and the last being a flag. If
+ bit 0 of the flag is set, secure memory has been requested. The
+ handler should either return true to indicate that Libgcrypt should
+ try again allocating memory or return false to let Libgcrypt use
+ its default fatal error handler.
+
+ -- Data type: gcry_handler_error_t
+ This type is defined as: 'void (*gcry_handler_error_t) (void *,
+ int, const char *)'
+
+ -- Function: void gcry_set_fatalerror_handler (gcry_handler_error_t
+ FUNC_ERROR, void *CB_DATA)
+ This function registers FUNC_ERROR as 'error handler', which means
+ that it will be called in error conditions.
+
+\1f
+File: gcrypt.info, Node: Logging handler, Prev: Error handler, Up: Handler Functions
+
+4.4 Logging handler
+===================
+
+ -- Data type: gcry_handler_log_t
+ This type is defined as: 'void (*gcry_handler_log_t) (void *, int,
+ const char *, va_list)'
+
+ -- Function: void gcry_set_log_handler (gcry_handler_log_t FUNC_LOG,
+ void *CB_DATA)
+ This function registers FUNC_LOG as 'logging handler', which means
+ that it will be called in case Libgcrypt wants to log a message.
+ This function may and should be used prior to calling
+ 'gcry_check_version'.
+
+\1f
+File: gcrypt.info, Node: Symmetric cryptography, Next: Public Key cryptography, Prev: Handler Functions, Up: Top
+
+5 Symmetric cryptography
+************************
+
+The cipher functions are used for symmetrical cryptography, i.e.
+cryptography using a shared key. The programming model follows an
+open/process/close paradigm and is in that similar to other building
+blocks provided by Libgcrypt.
+
+* Menu:
+
+* Available ciphers:: List of ciphers supported by the library.
+* Available cipher modes:: List of cipher modes supported by the library.
+* Working with cipher handles:: How to perform operations related to cipher handles.
+* General cipher functions:: General cipher functions independent of cipher handles.
+
+\1f
+File: gcrypt.info, Node: Available ciphers, Next: Available cipher modes, Up: Symmetric cryptography
+
+5.1 Available ciphers
+=====================
+
+'GCRY_CIPHER_NONE'
+ This is not a real algorithm but used by some functions as error
+ return. The value always evaluates to false.
+
+'GCRY_CIPHER_IDEA'
+ This is the IDEA algorithm.
+
+'GCRY_CIPHER_3DES'
+ Triple-DES with 3 keys as EDE. The key size of this algorithm is
+ 168 bits but you have to pass 192 bits because the most significant
+ bits of each byte are ignored.
+
+'GCRY_CIPHER_CAST5'
+ CAST128-5 block cipher algorithm. The key size is 128 bits.
+
+'GCRY_CIPHER_BLOWFISH'
+ The blowfish algorithm. The supported key sizes are 8 to 576 bits
+ in 8 bit increments.
+
+'GCRY_CIPHER_SAFER_SK128'
+ Reserved and not currently implemented.
+
+'GCRY_CIPHER_DES_SK'
+ Reserved and not currently implemented.
+
+'GCRY_CIPHER_AES'
+'GCRY_CIPHER_AES128'
+'GCRY_CIPHER_RIJNDAEL'
+'GCRY_CIPHER_RIJNDAEL128'
+ AES (Rijndael) with a 128 bit key.
+
+'GCRY_CIPHER_AES192'
+'GCRY_CIPHER_RIJNDAEL192'
+ AES (Rijndael) with a 192 bit key.
+
+'GCRY_CIPHER_AES256'
+'GCRY_CIPHER_RIJNDAEL256'
+ AES (Rijndael) with a 256 bit key.
+
+'GCRY_CIPHER_TWOFISH'
+ The Twofish algorithm with a 256 bit key.
+
+'GCRY_CIPHER_TWOFISH128'
+ The Twofish algorithm with a 128 bit key.
+
+'GCRY_CIPHER_ARCFOUR'
+ An algorithm which is 100% compatible with RSA Inc.'s RC4
+ algorithm. Note that this is a stream cipher and must be used very
+ carefully to avoid a couple of weaknesses.
+
+'GCRY_CIPHER_DES'
+ Standard DES with a 56 bit key. You need to pass 64 bits but the
+ high bits of each byte are ignored. Note, that this is a weak
+ algorithm which can be broken in reasonable time using a brute
+ force approach.
+
+'GCRY_CIPHER_SERPENT128'
+'GCRY_CIPHER_SERPENT192'
+'GCRY_CIPHER_SERPENT256'
+ The Serpent cipher from the AES contest.
+
+'GCRY_CIPHER_RFC2268_40'
+'GCRY_CIPHER_RFC2268_128'
+ Ron's Cipher 2 in the 40 and 128 bit variants.
+
+'GCRY_CIPHER_SEED'
+ A 128 bit cipher as described by RFC4269.
+
+'GCRY_CIPHER_CAMELLIA128'
+'GCRY_CIPHER_CAMELLIA192'
+'GCRY_CIPHER_CAMELLIA256'
+ The Camellia cipher by NTT. See
+ <http://info.isl.ntt.co.jp/crypt/eng/camellia/specifications.html>.
+
+'GCRY_CIPHER_SALSA20'
+ This is the Salsa20 stream cipher.
+
+'GCRY_CIPHER_SALSA20R12'
+ This is the Salsa20/12 - reduced round version of Salsa20 stream
+ cipher.
+
+'GCRY_CIPHER_GOST28147'
+ The GOST 28147-89 cipher, defined in the respective GOST standard.
+ Translation of this GOST into English is provided in the RFC-5830.
+
+'GCRY_CIPHER_GOST28147_MESH'
+ The GOST 28147-89 cipher, defined in the respective GOST standard.
+ Translation of this GOST into English is provided in the RFC-5830.
+ This cipher will use CryptoPro keymeshing as defined in RFC 4357 if
+ it has to be used for the selected parameter set.
+
+'GCRY_CIPHER_CHACHA20'
+ This is the ChaCha20 stream cipher.
+
+'GCRY_CIPHER_SM4'
+ A 128 bit cipher by the State Cryptography Administration of China
+ (SCA). See <https://tools.ietf.org/html/draft-ribose-cfrg-sm4-10>.
+
+\1f
+File: gcrypt.info, Node: Available cipher modes, Next: Working with cipher handles, Prev: Available ciphers, Up: Symmetric cryptography
+
+5.2 Available cipher modes
+==========================
+
+'GCRY_CIPHER_MODE_NONE'
+ No mode specified. This should not be used. The only exception is
+ that if Libgcrypt is not used in FIPS mode and if any debug flag
+ has been set, this mode may be used to bypass the actual
+ encryption.
+
+'GCRY_CIPHER_MODE_ECB'
+ Electronic Codebook mode.
+
+'GCRY_CIPHER_MODE_CFB'
+'GCRY_CIPHER_MODE_CFB8'
+ Cipher Feedback mode. For 'GCRY_CIPHER_MODE_CFB' the shift size
+ equals the block size of the cipher (e.g. for AES it is CFB-128).
+ For 'GCRY_CIPHER_MODE_CFB8' the shift size is 8 bits but that
+ variant is not yet available.
+
+'GCRY_CIPHER_MODE_CBC'
+ Cipher Block Chaining mode.
+
+'GCRY_CIPHER_MODE_STREAM'
+ Stream mode, only to be used with stream cipher algorithms.
+
+'GCRY_CIPHER_MODE_OFB'
+ Output Feedback mode.
+
+'GCRY_CIPHER_MODE_CTR'
+ Counter mode.
+
+'GCRY_CIPHER_MODE_AESWRAP'
+ This mode is used to implement the AES-Wrap algorithm according to
+ RFC-3394. It may be used with any 128 bit block length algorithm,
+ however the specs require one of the 3 AES algorithms. These
+ special conditions apply: If 'gcry_cipher_setiv' has not been used,
+ the standard IV is used; if it has been used, the lower 64 bits of
+ the IV are used as the Alternative Initial Value. On encryption
+ the provided output buffer must be 64 bits (8 bytes) larger than
+ the input buffer; in-place encryption is still allowed. On
+ decryption the output buffer may be specified 64 bits (8 bytes)
+ shorter than then input buffer. As per specs the input length must
+ be at least 128 bits and the length must be a multiple of 64 bits.
+
+'GCRY_CIPHER_MODE_CCM'
+ Counter with CBC-MAC mode is an Authenticated Encryption with
+ Associated Data (AEAD) block cipher mode, which is specified in
+ 'NIST Special Publication 800-38C' and RFC 3610.
+
+'GCRY_CIPHER_MODE_GCM'
+ Galois/Counter Mode (GCM) is an Authenticated Encryption with
+ Associated Data (AEAD) block cipher mode, which is specified in
+ 'NIST Special Publication 800-38D'.
+
+'GCRY_CIPHER_MODE_POLY1305'
+ This mode implements the Poly1305 Authenticated Encryption with
+ Associated Data (AEAD) mode according to RFC-8439. This mode can
+ be used with ChaCha20 stream cipher.
+
+'GCRY_CIPHER_MODE_OCB'
+ OCB is an Authenticated Encryption with Associated Data (AEAD)
+ block cipher mode, which is specified in RFC-7253. Supported tag
+ lengths are 128, 96, and 64 bits with the default being 128 bits.
+ To switch to a different tag length, 'gcry_cipher_ctl' using the
+ command 'GCRYCTL_SET_TAGLEN' and the address of an 'int' variable
+ set to 12 (for 96 bits) or 8 (for 64 bits) provided for the
+ 'buffer' argument and 'sizeof(int)' for 'buflen'.
+
+ Note that the use of 'gcry_cipher_final' is required.
+
+'GCRY_CIPHER_MODE_XTS'
+ XEX-based tweaked-codebook mode with ciphertext stealing (XTS) mode
+ is used to implement the AES-XTS as specified in IEEE 1619 Standard
+ Architecture for Encrypted Shared Storage Media and NIST SP800-38E.
+
+ The XTS mode requires doubling key-length, for example, using
+ 512-bit key with AES-256 ('GCRY_CIPHER_AES256'). The 128-bit tweak
+ value is feed to XTS mode as little-endian byte array using
+ 'gcry_cipher_setiv' function. When encrypting or decrypting,
+ full-sized data unit buffers needs to be passed to
+ 'gcry_cipher_encrypt' or 'gcry_cipher_decrypt'. The tweak value is
+ automatically incremented after each call of 'gcry_cipher_encrypt'
+ and 'gcry_cipher_decrypt'. Auto-increment allows avoiding need of
+ setting IV between processing of sequential data units.
+
+'GCRY_CIPHER_MODE_EAX'
+ EAX is an Authenticated Encryption with Associated Data (AEAD)
+ block cipher mode by Bellare, Rogaway, and Wagner (see
+ <http://web.cs.ucdavis.edu/~rogaway/papers/eax.html>).
+
+'GCRY_CIPHER_MODE_SIV'
+ Synthetic Initialization Vector (SIV) is an Authenticated
+ Encryption with Associated Data (AEAD) block cipher mode, which is
+ specified in RFC-5297. This mode works with block ciphers with
+ block size of 128 bits and uses tag length of 128 bits. Depending
+ on how it is used, SIV achieves either the goal of deterministic
+ authenticated encryption or the goal of nonce-based,
+ misuse-resistant authenticated encryption.
+
+ The SIV mode requires doubling key-length, for example, using
+ 512-bit key with AES-256 ('GCRY_CIPHER_AES256'). Multiple AD
+ instances can be passed to SIV mode with separate calls to
+ 'gcry_cipher_authenticate'. Nonce may be passed either through
+ 'gcry_cipher_setiv' or in the last call to
+ 'gcry_cipher_authenticate'. Note that use of 'gcry_cipher_setiv'
+ blocks any further calls to 'gcry_cipher_authenticate' as nonce
+ needs to be the last AD element with the SIV mode. When encrypting
+ or decrypting, full-sized plaintext or ciphertext needs to be
+ passed to 'gcry_cipher_encrypt' or 'gcry_cipher_decrypt'.
+ Decryption tag needs to be given to SIV mode before decryption
+ using 'gcry_cipher_set_decryption_tag'.
+
+'GCRY_CIPHER_MODE_GCM_SIV'
+ This mode implements is GCM-SIV Authenticated Encryption with
+ Associated Data (AEAD) block cipher mode specified in RFC-5297
+ (AES-GCM-SIV: Nonce Misuse-Resistant Authenticated Encryption).
+ This implementations works with block ciphers with block size of
+ 128 bits and uses tag length of 128 bits. Supported key lengths by
+ the mode are 128 bits and 256 bits. GCM-SIV is specified as nonce
+ misuse resistant, so that it does not fail catastrophically if a
+ nonce is repeated.
+
+ When encrypting or decrypting, full-sized plaintext or ciphertext
+ needs to be passed to 'gcry_cipher_encrypt' or
+ 'gcry_cipher_decrypt'. Decryption tag needs to be given to GCM-SIV
+ mode before decryption using 'gcry_cipher_set_decryption_tag'.
+
+\1f
+File: gcrypt.info, Node: Working with cipher handles, Next: General cipher functions, Prev: Available cipher modes, Up: Symmetric cryptography
+
+5.3 Working with cipher handles
+===============================
+
+To use a cipher algorithm, you must first allocate an according handle.
+This is to be done using the open function:
+
+ -- Function: gcry_error_t gcry_cipher_open (gcry_cipher_hd_t *HD, int
+ ALGO, int MODE, unsigned int FLAGS)
+
+ This function creates the context handle required for most of the
+ other cipher functions and returns a handle to it in 'hd'. In case
+ of an error, an according error code is returned.
+
+ The ID of algorithm to use must be specified via ALGO. See *note
+ Available ciphers:: for a list of supported ciphers and the
+ according constants.
+
+ Besides using the constants directly, the function
+ 'gcry_cipher_map_name' may be used to convert the textual name of
+ an algorithm into the according numeric ID.
+
+ The cipher mode to use must be specified via MODE. See *note
+ Available cipher modes:: for a list of supported cipher modes and
+ the according constants. Note that some modes are incompatible
+ with some algorithms - in particular, stream mode
+ ('GCRY_CIPHER_MODE_STREAM') only works with stream ciphers.
+ Poly1305 AEAD mode ('GCRY_CIPHER_MODE_POLY1305') only works with
+ ChaCha20 stream cipher. The block cipher modes
+ ('GCRY_CIPHER_MODE_ECB', 'GCRY_CIPHER_MODE_CBC',
+ 'GCRY_CIPHER_MODE_CFB', 'GCRY_CIPHER_MODE_OFB',
+ 'GCRY_CIPHER_MODE_CTR' and 'GCRY_CIPHER_MODE_EAX') will work with
+ any block cipher algorithm. GCM mode ('GCRY_CIPHER_MODE_GCM'), CCM
+ mode ('GCRY_CIPHER_MODE_CCM'), OCB mode ('GCRY_CIPHER_MODE_OCB'),
+ XTS mode ('GCRY_CIPHER_MODE_XTS'), SIV mode
+ ('GCRY_CIPHER_MODE_SIV') and GCM-SIV mode
+ ('GCRY_CIPHER_MODE_GCM_SIV') will only work with block cipher
+ algorithms which have the block size of 16 bytes.
+
+ The third argument FLAGS can either be passed as '0' or as the
+ bit-wise OR of the following constants.
+
+ 'GCRY_CIPHER_SECURE'
+ Make sure that all operations are allocated in secure memory.
+ This is useful when the key material is highly confidential.
+ 'GCRY_CIPHER_ENABLE_SYNC'
+ This flag enables the CFB sync mode, which is a special
+ feature of Libgcrypt's CFB mode implementation to allow for
+ OpenPGP's CFB variant. See 'gcry_cipher_sync'.
+ 'GCRY_CIPHER_CBC_CTS'
+ Enable cipher text stealing (CTS) for the CBC mode. Cannot be
+ used simultaneously with GCRY_CIPHER_CBC_MAC. CTS mode makes
+ it possible to transform data of almost arbitrary size (only
+ limitation is that it must be greater than the algorithm's
+ block size).
+ 'GCRY_CIPHER_CBC_MAC'
+ Compute CBC-MAC keyed checksums. This is the same as CBC
+ mode, but only output the last block. Cannot be used
+ simultaneously with GCRY_CIPHER_CBC_CTS.
+
+ Use the following function to release an existing handle:
+
+ -- Function: void gcry_cipher_close (gcry_cipher_hd_t H)
+
+ This function releases the context created by 'gcry_cipher_open'.
+ It also zeroises all sensitive information associated with this
+ cipher handle.
+
+ In order to use a handle for performing cryptographic operations, a
+'key' has to be set first:
+
+ -- Function: gcry_error_t gcry_cipher_setkey (gcry_cipher_hd_t H, const
+ void *K, size_t L)
+
+ Set the key K used for encryption or decryption in the context
+ denoted by the handle H. The length L (in bytes) of the key K must
+ match the required length of the algorithm set for this context or
+ be in the allowed range for algorithms with variable key size. The
+ function checks this and returns an error if there is a problem. A
+ caller should always check for an error.
+
+ Most crypto modes requires an initialization vector (IV), which
+usually is a non-secret random string acting as a kind of salt value.
+The CTR mode requires a counter, which is also similar to a salt value.
+To set the IV or CTR, use these functions:
+
+ -- Function: gcry_error_t gcry_cipher_setiv (gcry_cipher_hd_t H, const
+ void *K, size_t L)
+
+ Set the initialization vector used for encryption or decryption.
+ The vector is passed as the buffer K of length L bytes and copied
+ to internal data structures. The function checks that the IV
+ matches the requirement of the selected algorithm and mode.
+
+ This function is also used by AEAD modes and with Salsa20 and
+ ChaCha20 stream ciphers to set or update the required nonce. In
+ these cases it needs to be called after setting the key.
+
+ -- Function: gcry_error_t gcry_cipher_setctr (gcry_cipher_hd_t H, const
+ void *C, size_t L)
+
+ Set the counter vector used for encryption or decryption. The
+ counter is passed as the buffer C of length L bytes and copied to
+ internal data structures. The function checks that the counter
+ matches the requirement of the selected algorithm (i.e., it must
+ have the same size as the block size).
+
+ -- Function: gcry_error_t gcry_cipher_reset (gcry_cipher_hd_t H)
+
+ Set the given handle's context back to the state it had after the
+ last call to 'gcry_cipher_setkey' and clear the initialization
+ vector.
+
+ Note that 'gcry_cipher_reset' is implemented as a macro.
+
+ Authenticated Encryption with Associated Data (AEAD) block cipher
+modes require the handling of the authentication tag and the additional
+authenticated data, which can be done by using the following functions:
+
+ -- Function: gcry_error_t gcry_cipher_authenticate (gcry_cipher_hd_t H,
+ const void *ABUF, size_t ABUFLEN)
+
+ Process the buffer ABUF of length ABUFLEN as the additional
+ authenticated data (AAD) for AEAD cipher modes.
+
+ -- Function: gcry_error_t gcry_cipher_gettag (gcry_cipher_hd_t H,
+ void *TAG, size_t TAGLEN)
+
+ This function is used to read the authentication tag after
+ encryption. The function finalizes and outputs the authentication
+ tag to the buffer TAG of length TAGLEN bytes.
+
+ Depending on the used mode certain restrictions for TAGLEN are
+ enforced: For GCM TAGLEN must be at least 16 or one of the allowed
+ truncated lengths (4, 8, 12, 13, 14, or 15).
+
+ -- Function: gcry_error_t gcry_cipher_checktag (gcry_cipher_hd_t H,
+ const void *TAG, size_t TAGLEN)
+
+ Check the authentication tag after decryption. The authentication
+ tag is passed as the buffer TAG of length TAGLEN bytes and compared
+ to internal authentication tag computed during decryption. Error
+ code 'GPG_ERR_CHECKSUM' is returned if the authentication tag in
+ the buffer TAG does not match the authentication tag calculated
+ during decryption.
+
+ Depending on the used mode certain restrictions for TAGLEN are
+ enforced: For GCM TAGLEN must either be 16 or one of the allowed
+ truncated lengths (4, 8, 12, 13, 14, or 15).
+
+ The actual encryption and decryption is done by using one of the
+following functions. They may be used as often as required to process
+all the data.
+
+ -- Function: gcry_error_t gcry_cipher_encrypt (gcry_cipher_hd_t H,
+ unsigned char *out, size_t OUTSIZE, const unsigned char *IN,
+ size_t INLEN)
+
+ 'gcry_cipher_encrypt' is used to encrypt the data. This function
+ can either work in place or with two buffers. It uses the cipher
+ context already setup and described by the handle H. There are 2
+ ways to use the function: If IN is passed as 'NULL' and INLEN is
+ '0', in-place encryption of the data in OUT of length OUTSIZE takes
+ place. With IN being not 'NULL', INLEN bytes are encrypted to the
+ buffer OUT which must have at least a size of INLEN. OUTSIZE must
+ be set to the allocated size of OUT, so that the function can check
+ that there is sufficient space. Note that overlapping buffers are
+ not allowed.
+
+ Depending on the selected algorithms and encryption mode, the
+ length of the buffers must be a multiple of the block size.
+
+ Some encryption modes require that 'gcry_cipher_final' is used
+ before the final data chunk is passed to this function.
+
+ The function returns '0' on success or an error code.
+
+ -- Function: gcry_error_t gcry_cipher_decrypt (gcry_cipher_hd_t H,
+ unsigned char *out, size_t OUTSIZE, const unsigned char *IN,
+ size_t INLEN)
+
+ 'gcry_cipher_decrypt' is used to decrypt the data. This function
+ can either work in place or with two buffers. It uses the cipher
+ context already setup and described by the handle H. There are 2
+ ways to use the function: If IN is passed as 'NULL' and INLEN is
+ '0', in-place decryption of the data in OUT or length OUTSIZE takes
+ place. With IN being not 'NULL', INLEN bytes are decrypted to the
+ buffer OUT which must have at least a size of INLEN. OUTSIZE must
+ be set to the allocated size of OUT, so that the function can check
+ that there is sufficient space. Note that overlapping buffers are
+ not allowed.
+
+ Depending on the selected algorithms and encryption mode, the
+ length of the buffers must be a multiple of the block size.
+
+ Some encryption modes require that 'gcry_cipher_final' is used
+ before the final data chunk is passed to this function.
+
+ The function returns '0' on success or an error code.
+
+ The OCB mode features integrated padding and must thus be told about
+the end of the input data. This is done with:
+
+ -- Function: gcry_error_t gcry_cipher_final (gcry_cipher_hd_t H)
+
+ Set a flag in the context to tell the encrypt and decrypt functions
+ that their next call will provide the last chunk of data. Only the
+ first call to this function has an effect and only for modes which
+ support it. Checking the error is in general not necessary. This
+ is implemented as a macro.
+
+ The SIV mode and the GCM-SIV mode requires decryption tag to be input
+before decryption. This is done with:
+
+ -- Function: gcry_error_t gcry_cipher_set_decryption_tag
+ (gcry_cipher_hd_t H, const void *TAG, size_t TAGLEN)
+
+ Set decryption tag for SIV or GCM-SIV mode decryption. This is
+ implemented as a macro.
+
+ OpenPGP (as defined in RFC-4880) requires a special sync operation in
+some places. The following function is used for this:
+
+ -- Function: gcry_error_t gcry_cipher_sync (gcry_cipher_hd_t H)
+
+ Perform the OpenPGP sync operation on context H. Note that this is
+ a no-op unless the context was created with the flag
+ 'GCRY_CIPHER_ENABLE_SYNC'.
+
+ Some of the described functions are implemented as macros utilizing a
+catch-all control function. This control function is rarely used
+directly but there is nothing which would inhibit it:
+
+ -- Function: gcry_error_t gcry_cipher_ctl (gcry_cipher_hd_t H, int CMD,
+ void *BUFFER, size_t BUFLEN)
+
+ 'gcry_cipher_ctl' controls various aspects of the cipher module and
+ specific cipher contexts. Usually some more specialized functions
+ or macros are used for this purpose. The semantics of the function
+ and its parameters depends on the command CMD and the passed
+ context handle H. Please see the comments in the source code
+ ('src/global.c') for details.
+
+'GCRYCTL_SET_ALLOW_WEAK_KEY:'
+
+ This may be used to allow use of weak keys for certain block
+ ciphers. BUFFER must be given as 'NULL'. To allow weak keys for a
+ cipher context H, set BUFLEN to '1'. To disallow weak keys, set
+ BUFLEN to '0'.
+
+ Default setting for a cipher context is to disallow weak keys.
+
+ Note that even if weak keys are allowed, 'gcry_cipher_setkey' will
+ return error code 'GPG_ERR_WEAK_KEY' if a weak key is detected.
+ However, the cipher context is configured with the weak key and can
+ proceed with encryption/decryption. When weak keys are disallowed,
+ error code 'GPG_ERR_WEAK_KEY' is returned and the cipher context is
+ cannot be used for encryption/decryption.
+
+ -- Function: gcry_error_t gcry_cipher_info (gcry_cipher_hd_t H, int
+ WHAT, void *BUFFER, size_t *NBYTES)
+
+ 'gcry_cipher_info' is used to retrieve various information about a
+ cipher context or the cipher module in general.
+
+ 'GCRYCTL_GET_TAGLEN:'
+ Return the length of the tag for an AE algorithm mode. An
+ error is returned for modes which do not support a tag.
+ BUFFER must be given as 'NULL'. On success the result is
+ stored NBYTES. The taglen is returned in bytes.
+
+\1f
+File: gcrypt.info, Node: General cipher functions, Prev: Working with cipher handles, Up: Symmetric cryptography
+
+5.4 General cipher functions
+============================
+
+To work with the algorithms, several functions are available to map
+algorithm names to the internal identifiers, as well as ways to retrieve
+information about an algorithm or the current cipher context.
+
+ -- Function: gcry_error_t gcry_cipher_algo_info (int ALGO, int WHAT,
+ void *BUFFER, size_t *NBYTES)
+
+ This function is used to retrieve information on a specific
+ algorithm. You pass the cipher algorithm ID as ALGO and the type
+ of information requested as WHAT. The result is either returned as
+ the return code of the function or copied to the provided BUFFER
+ whose allocated length must be available in an integer variable
+ with the address passed in NBYTES. This variable will also receive
+ the actual used length of the buffer.
+
+ Here is a list of supported codes for WHAT:
+
+ 'GCRYCTL_GET_KEYLEN:'
+ Return the length of the key. If the algorithm supports
+ multiple key lengths, the maximum supported value is returned.
+ The length is returned as number of octets (bytes) and not as
+ number of bits in NBYTES; BUFFER must be zero. Note that it
+ is usually better to use the convenience function
+ 'gcry_cipher_get_algo_keylen'.
+
+ 'GCRYCTL_GET_BLKLEN:'
+ Return the block length of the algorithm. The length is
+ returned as a number of octets in NBYTES; BUFFER must be zero.
+ Note that it is usually better to use the convenience function
+ 'gcry_cipher_get_algo_blklen'.
+
+ 'GCRYCTL_TEST_ALGO:'
+ Returns '0' when the specified algorithm is available for use.
+ BUFFER and NBYTES must be zero.
+
+ -- Function: size_t gcry_cipher_get_algo_keylen (ALGO)
+
+ This function returns length of the key for algorithm ALGO. If the
+ algorithm supports multiple key lengths, the maximum supported key
+ length is returned. On error '0' is returned. The key length is
+ returned as number of octets.
+
+ This is a convenience functions which should be preferred over
+ 'gcry_cipher_algo_info' because it allows proper type checking.
+
+ -- Function: size_t gcry_cipher_get_algo_blklen (int ALGO)
+
+ This functions returns the block-length of the algorithm ALGO
+ counted in octets. On error '0' is returned.
+
+ This is a convenience functions which should be preferred over
+ 'gcry_cipher_algo_info' because it allows proper type checking.
+
+ -- Function: const char * gcry_cipher_algo_name (int ALGO)
+
+ 'gcry_cipher_algo_name' returns a string with the name of the
+ cipher algorithm ALGO. If the algorithm is not known or another
+ error occurred, the string '"?"' is returned. This function should
+ not be used to test for the availability of an algorithm.
+
+ -- Function: int gcry_cipher_map_name (const char *NAME)
+
+ 'gcry_cipher_map_name' returns the algorithm identifier for the
+ cipher algorithm described by the string NAME. If this algorithm
+ is not available, '0' is returned.
+
+ -- Function: int gcry_cipher_mode_from_oid (const char *STRING)
+
+ Return the cipher mode associated with an ASN.1 object identifier.
+ The object identifier is expected to be in the IETF-style dotted
+ decimal notation. The function returns '0' for an unknown object
+ identifier or when no mode is associated with it.
+
+\1f
+File: gcrypt.info, Node: Public Key cryptography, Next: Hashing, Prev: Symmetric cryptography, Up: Top
+
+6 Public Key cryptography
+*************************
+
+Public key cryptography, also known as asymmetric cryptography, is an
+easy way for key management and to provide digital signatures.
+Libgcrypt provides two completely different interfaces to public key
+cryptography, this chapter explains the one based on S-expressions.
+
+* Menu:
+
+* Available algorithms:: Algorithms supported by the library.
+* Used S-expressions:: Introduction into the used S-expression.
+* Cryptographic Functions:: Functions for performing the cryptographic actions.
+* Dedicated ECC Functions:: Dedicated functions for elliptic curves.
+* General public-key related Functions:: General functions, not implementing any cryptography.
+
+\1f
+File: gcrypt.info, Node: Available algorithms, Next: Used S-expressions, Up: Public Key cryptography
+
+6.1 Available algorithms
+========================
+
+Libgcrypt supports the RSA (Rivest-Shamir-Adleman) algorithms as well as
+DSA (Digital Signature Algorithm), Elgamal, ECDSA, ECDH, and EdDSA.
+
+\1f
+File: gcrypt.info, Node: Used S-expressions, Next: Cryptographic Functions, Prev: Available algorithms, Up: Public Key cryptography
+
+6.2 Used S-expressions
+======================
+
+Libgcrypt's API for asymmetric cryptography is based on data structures
+called S-expressions (see
+<http://people.csail.mit.edu/rivest/sexp.html>) and does not work with
+contexts/handles as most of the other building blocks of Libgcrypt do.
+
+The following information are stored in S-expressions:
+
+ * keys
+
+ * plain text data
+
+ * encrypted data
+
+ * signatures
+
+To describe how Libgcrypt expect keys, we use examples. Note that words
+in uppercase indicate parameters, whereas lowercase words are literals.
+
+ Note that all MPI (multi-precision-integers) values are expected to
+be in 'GCRYMPI_FMT_USG' format. An easy way to create S-expressions is
+by using 'gcry_sexp_build' which allows to pass a string with
+printf-like escapes to insert MPI values.
+
+* Menu:
+
+* RSA key parameters:: Parameters used with an RSA key.
+* DSA key parameters:: Parameters used with a DSA key.
+* ECC key parameters:: Parameters used with ECC keys.
+
+\1f
+File: gcrypt.info, Node: RSA key parameters, Next: DSA key parameters, Up: Used S-expressions
+
+6.2.1 RSA key parameters
+------------------------
+
+An RSA private key is described by this S-expression:
+
+ (private-key
+ (rsa
+ (n N-MPI)
+ (e E-MPI)
+ (d D-MPI)
+ (p P-MPI)
+ (q Q-MPI)
+ (u U-MPI)))
+
+An RSA public key is described by this S-expression:
+
+ (public-key
+ (rsa
+ (n N-MPI)
+ (e E-MPI)))
+
+N-MPI
+ RSA public modulus n.
+E-MPI
+ RSA public exponent e.
+D-MPI
+ RSA secret exponent d = e^{-1} \bmod (p-1)(q-1).
+P-MPI
+ RSA secret prime p.
+Q-MPI
+ RSA secret prime q with p < q.
+U-MPI
+ Multiplicative inverse u = p^{-1} \bmod q.
+
+ For signing and decryption, the parameters (p, q, u) are optional but
+greatly improve the performance. Either all of these optional
+parameters must be given or none of them. They are mandatory for
+'gcry_pk_testkey'.
+
+ Note that OpenSSL uses slighly different parameters: q < p and u =
+q^{-1} \bmod p. To use these parameters you will need to swap the
+values and recompute u. Here is example code to do this:
+
+ if (gcry_mpi_cmp (p, q) > 0)
+ {
+ gcry_mpi_swap (p, q);
+ gcry_mpi_invm (u, p, q);
+ }
+
+\1f
+File: gcrypt.info, Node: DSA key parameters, Next: ECC key parameters, Prev: RSA key parameters, Up: Used S-expressions
+
+6.2.2 DSA key parameters
+------------------------
+
+A DSA private key is described by this S-expression:
+
+ (private-key
+ (dsa
+ (p P-MPI)
+ (q Q-MPI)
+ (g G-MPI)
+ (y Y-MPI)
+ (x X-MPI)))
+
+P-MPI
+ DSA prime p.
+Q-MPI
+ DSA group order q (which is a prime divisor of p-1).
+G-MPI
+ DSA group generator g.
+Y-MPI
+ DSA public key value y = g^x \bmod p.
+X-MPI
+ DSA secret exponent x.
+
+ The public key is similar, with "private-key" replaced by
+"public-key" and no X-MPI.
+
+\1f
+File: gcrypt.info, Node: ECC key parameters, Prev: DSA key parameters, Up: Used S-expressions
+
+6.2.3 ECC key parameters
+------------------------
+
+An ECC private key is described by this S-expression:
+
+ (private-key
+ (ecc
+ (p P-MPI)
+ (a A-MPI)
+ (b B-MPI)
+ (g G-POINT)
+ (n N-MPI)
+ (q Q-POINT)
+ (d D-MPI)))
+
+P-MPI
+ Prime specifying the field GF(p).
+A-MPI
+B-MPI
+ The two coefficients of the Weierstrass equation y^2 = x^3 + ax + b
+G-POINT
+ Base point g.
+N-MPI
+ Order of g
+Q-POINT
+ The point representing the public key Q = dG.
+D-MPI
+ The private key d
+
+ All point values are encoded in standard format; Libgcrypt does in
+general only support uncompressed points, thus the first byte needs to
+be '0x04'. However "EdDSA" describes its own compression scheme which
+is used by default; the non-standard first byte '0x40' may optionally be
+used to explicit flag the use of the algorithm's native compression
+method.
+
+ The public key is similar, with "private-key" replaced by
+"public-key" and no D-MPI.
+
+ If the domain parameters are well-known, the name of this curve may
+be used. For example
+
+ (private-key
+ (ecc
+ (curve "NIST P-192")
+ (q Q-POINT)
+ (d D-MPI)))
+
+ Note that Q-POINT is optional for a private key. The 'curve'
+parameter may be given in any case and is used to replace missing
+parameters.
+
+Currently implemented curves are:
+
+'Curve25519'
+'X25519'
+'1.3.6.1.4.1.3029.1.5.1'
+'1.3.101.110'
+ The RFC-8410 255 bit curve, its RFC name, OpenPGP and RFC OIDs.
+
+'X448'
+'1.3.101.111'
+ The RFC-8410 448 bit curve and its RFC OID.
+
+'Ed25519'
+'1.3.6.1.4.1.11591.15.1'
+'1.3.101.112'
+ The signing variant of the RFC-8410 255 bit curve, its OpenPGP and
+ RFC OIDs.
+
+'Ed448'
+'1.3.101.113'
+ The signing variant of the RFC-8410 448 bit curve and its RFC OID.
+
+'NIST P-192'
+'1.2.840.10045.3.1.1'
+'nistp192'
+'prime192v1'
+'secp192r1'
+ The NIST 192 bit curve, its OID and aliases.
+
+'NIST P-224'
+'1.3.132.0.33'
+'nistp224'
+'secp224r1'
+ The NIST 224 bit curve, its OID and aliases.
+
+'NIST P-256'
+'1.2.840.10045.3.1.7'
+'nistp256'
+'prime256v1'
+'secp256r1'
+ The NIST 256 bit curve, its OID and aliases.
+
+'NIST P-384'
+'1.3.132.0.34'
+'nistp384'
+'secp384r1'
+ The NIST 384 bit curve, its OID and aliases.
+
+'NIST P-521'
+'1.3.132.0.35'
+'nistp521'
+'secp521r1'
+ The NIST 521 bit curve, its OID and aliases.
+
+'brainpoolP160r1'
+'1.3.36.3.3.2.8.1.1.1'
+ The Brainpool 160 bit curve and its OID.
+
+'brainpoolP192r1'
+'1.3.36.3.3.2.8.1.1.3'
+ The Brainpool 192 bit curve and its OID.
+
+'brainpoolP224r1'
+'1.3.36.3.3.2.8.1.1.5'
+ The Brainpool 224 bit curve and its OID.
+
+'brainpoolP256r1'
+'1.3.36.3.3.2.8.1.1.7'
+ The Brainpool 256 bit curve and its OID.
+
+'brainpoolP320r1'
+'1.3.36.3.3.2.8.1.1.9'
+ The Brainpool 320 bit curve and its OID.
+
+'brainpoolP384r1'
+'1.3.36.3.3.2.8.1.1.11'
+ The Brainpool 384 bit curve and its OID.
+
+'brainpoolP512r1'
+'1.3.36.3.3.2.8.1.1.13'
+ The Brainpool 512 bit curve and its OID.
+
+'GOST2001-test'
+'1.2.643.2.2.35.0'
+
+'GOST2001-CryptoPro-A'
+'1.2.643.2.2.35.1'
+
+'GOST2001-CryptoPro-B'
+'1.2.643.2.2.35.2'
+
+'GOST2001-CryptoPro-C'
+'1.2.643.2.2.35.3'
+
+'GOST2001-CryptoPro-A'
+'GOST2001-CryptoPro-XchA'
+
+'GOST2001-CryptoPro-C'
+'GOST2001-CryptoPro-XchB'
+
+'GOST2001-CryptoPro-A'
+'1.2.643.2.2.36.0'
+
+'GOST2001-CryptoPro-C'
+'1.2.643.2.2.36.1'
+
+'GOST2012-256-tc26-A'
+'1.2.643.7.1.2.1.1.1'
+
+'GOST2001-CryptoPro-A'
+'1.2.643.7.1.2.1.1.2'
+
+'GOST2001-CryptoPro-A'
+'GOST2012-256-tc26-B'
+
+'GOST2001-CryptoPro-B'
+'1.2.643.7.1.2.1.1.3'
+
+'GOST2001-CryptoPro-B'
+'GOST2012-256-tc26-C'
+
+'GOST2001-CryptoPro-C'
+'1.2.643.7.1.2.1.1.4'
+
+'GOST2001-CryptoPro-C'
+'GOST2012-256-tc26-D'
+
+'GOST2012-512-test'
+'GOST2012-test'
+
+'GOST2012-512-test'
+'1.2.643.7.1.2.1.2.0'
+
+'GOST2012-512-tc26-A'
+'GOST2012-tc26-A'
+
+'GOST2012-512-tc26-B'
+'GOST2012-tc26-B'
+
+'GOST2012-512-tc26-A'
+'1.2.643.7.1.2.1.2.1'
+
+'GOST2012-512-tc26-B'
+'1.2.643.7.1.2.1.2.2'
+
+'GOST2012-512-tc26-C'
+'1.2.643.7.1.2.1.2.3'
+
+'secp256k1'
+'1.3.132.0.10'
+
+'sm2p256v1'
+'1.2.156.10197.1.301'
+
+ As usual the OIDs may optionally be prefixed with the string 'OID.'
+or 'oid.'.
+
+\1f
+File: gcrypt.info, Node: Cryptographic Functions, Next: Dedicated ECC Functions, Prev: Used S-expressions, Up: Public Key cryptography
+
+6.3 Cryptographic Functions
+===========================
+
+Some functions operating on S-expressions support 'flags' to influence
+the operation. These flags have to be listed in a sub-S-expression
+named 'flags'. Flag names are case-sensitive. The following flags are
+known:
+
+'comp'
+'nocomp'
+ If supported by the algorithm and curve, the 'comp' flag requests
+ that points are returned in compact (compressed) representation.
+ The 'nocomp' flag requests that points are returned with full
+ coordinates. The default depends on the the algorithm and curve.
+ The compact representation requires a small overhead before a point
+ can be used but halves the size of a public key to be conveyed. If
+ 'comp' is used with the "EdDSA" algorithm, the key generation
+ prefixes the public key with a '0x40' byte.
+
+'pkcs1'
+ Use PKCS#1 block type 2 padding for encryption, block type 1
+ padding for signing.
+
+'oaep'
+ Use RSA-OAEP padding for encryption.
+
+'pss'
+ Use RSA-PSS padding for signing.
+
+'eddsa'
+ Use the EdDSA scheme signing instead of the default ECDSA
+ algorithm. Note that the EdDSA uses a special form of the public
+ key.
+
+'rfc6979'
+ For DSA and ECDSA use a deterministic scheme for the k parameter.
+
+'no-blinding'
+ Do not use a technique called 'blinding', which is used by default
+ in order to prevent leaking of secret information. Blinding is
+ only implemented by RSA, but it might be implemented by other
+ algorithms in the future as well, when necessary.
+
+'param'
+ For ECC key generation also return the domain parameters. For ECC
+ signing and verification override default parameters by provided
+ domain parameters of the public or private key.
+
+'transient-key'
+ This flag is only meaningful for RSA, DSA, and ECC key generation.
+ If given, the key is created using a faster and a somewhat less
+ secure random number generator. This flag may be used for keys
+ which are only used for a short time or per-message and do not
+ require full cryptographic strength.
+
+'no-keytest'
+ This flag skips internal failsafe tests to assert that a generated
+ key is properly working. It currently has an effect only for
+ standard ECC key generation. It is mostly useful along with
+ transient-key to achieve fastest ECC key generation.
+
+'use-x931'
+ Force the use of the ANSI X9.31 key generation algorithm instead of
+ the default algorithm. This flag is only meaningful for RSA key
+ generation and usually not required. Note that this algorithm is
+ implicitly used if either 'derive-parms' is given.
+
+'use-fips186'
+ Force the use of the FIPS 186 key generation algorithm instead of
+ the default algorithm. This flag is only meaningful for DSA and
+ usually not required. Note that this algorithm is implicitly used
+ if either 'derive-parms' is given or Libgcrypt is in FIPS mode. As
+ of now FIPS 186-2 is implemented; after the approval of FIPS 186-3
+ the code will be changed to implement 186-3.
+
+'use-fips186-2'
+ Force the use of the FIPS 186-2 key generation algorithm instead of
+ the default algorithm. This algorithm is slightly different from
+ FIPS 186-3 and allows only 1024 bit keys. This flag is only
+ meaningful for DSA and only required for FIPS testing backward
+ compatibility.
+
+Now that we know the key basics, we can carry on and explain how to
+encrypt and decrypt data. In almost all cases the data is a random
+session key which is in turn used for the actual encryption of the real
+data. There are 2 functions to do this:
+
+ -- Function: gcry_error_t gcry_pk_encrypt (gcry_sexp_t *R_CIPH,
+ gcry_sexp_t DATA, gcry_sexp_t PKEY)
+
+ Obviously a public key must be provided for encryption. It is
+ expected as an appropriate S-expression (see above) in PKEY. The
+ data to be encrypted can either be in the simple old format, which
+ is a very simple S-expression consisting only of one MPI, or it may
+ be a more complex S-expression which also allows to specify flags
+ for operation, like e.g. padding rules.
+
+ If you don't want to let Libgcrypt handle the padding, you must
+ pass an appropriate MPI using this expression for DATA:
+
+ (data
+ (flags raw)
+ (value MPI))
+
+ This has the same semantics as the old style MPI only way. MPI is
+ the actual data, already padded appropriate for your protocol.
+ Most RSA based systems however use PKCS#1 padding and so you can
+ use this S-expression for DATA:
+
+ (data
+ (flags pkcs1)
+ (value BLOCK))
+
+ Here, the "flags" list has the "pkcs1" flag which let the function
+ know that it should provide PKCS#1 block type 2 padding. The
+ actual data to be encrypted is passed as a string of octets in
+ BLOCK. The function checks that this data actually can be used
+ with the given key, does the padding and encrypts it.
+
+ If the function could successfully perform the encryption, the
+ return value will be 0 and a new S-expression with the encrypted
+ result is allocated and assigned to the variable at the address of
+ R_CIPH. The caller is responsible to release this value using
+ 'gcry_sexp_release'. In case of an error, an error code is
+ returned and R_CIPH will be set to 'NULL'.
+
+ The returned S-expression has this format when used with RSA:
+
+ (enc-val
+ (rsa
+ (a A-MPI)))
+
+ Where A-MPI is an MPI with the result of the RSA operation. When
+ using the Elgamal algorithm, the return value will have this
+ format:
+
+ (enc-val
+ (elg
+ (a A-MPI)
+ (b B-MPI)))
+
+ Where A-MPI and B-MPI are MPIs with the result of the Elgamal
+ encryption operation.
+
+ -- Function: gcry_error_t gcry_pk_decrypt (gcry_sexp_t *R_PLAIN,
+ gcry_sexp_t DATA, gcry_sexp_t SKEY)
+
+ Obviously a private key must be provided for decryption. It is
+ expected as an appropriate S-expression (see above) in SKEY. The
+ data to be decrypted must match the format of the result as
+ returned by 'gcry_pk_encrypt', but should be enlarged with a
+ 'flags' element:
+
+ (enc-val
+ (flags)
+ (elg
+ (a A-MPI)
+ (b B-MPI)))
+
+ This function does not remove padding from the data by default. To
+ let Libgcrypt remove padding, give a hint in 'flags' telling which
+ padding method was used when encrypting:
+
+ (flags PADDING-METHOD)
+
+ Currently PADDING-METHOD is either 'pkcs1' for PKCS#1 block type 2
+ padding, or 'oaep' for RSA-OAEP padding.
+
+ The function returns 0 on success or an error code. The variable
+ at the address of R_PLAIN will be set to 'NULL' on error or receive
+ the decrypted value on success. The format of R_PLAIN is a simple
+ S-expression part (i.e. not a valid one) with just one MPI if
+ there was no 'flags' element in DATA; if at least an empty 'flags'
+ is passed in DATA, the format is:
+
+ (value PLAINTEXT)
+
+ Another operation commonly performed using public key cryptography is
+signing data. In some sense this is even more important than encryption
+because digital signatures are an important instrument for key
+management. Libgcrypt supports digital signatures using 2 functions,
+similar to the encryption functions:
+
+ -- Function: gcry_error_t gcry_pk_sign (gcry_sexp_t *R_SIG,
+ gcry_sexp_t DATA, gcry_sexp_t SKEY)
+
+ This function creates a digital signature for DATA using the
+ private key SKEY and place it into the variable at the address of
+ R_SIG. DATA may either be the simple old style S-expression with
+ just one MPI or a modern and more versatile S-expression which
+ allows to let Libgcrypt handle padding:
+
+ (data
+ (flags pkcs1)
+ (hash HASH-ALGO BLOCK))
+
+ This example requests to sign the data in BLOCK after applying
+ PKCS#1 block type 1 style padding. HASH-ALGO is a string with the
+ hash algorithm to be encoded into the signature, this may be any
+ hash algorithm name as supported by Libgcrypt. Most likely, this
+ will be "sha256" or "sha1". It is obvious that the length of BLOCK
+ must match the size of that message digests; the function checks
+ that this and other constraints are valid.
+
+ If PKCS#1 padding is not required (because the caller does already
+ provide a padded value), either the old format or better the
+ following format should be used:
+
+ (data
+ (flags raw)
+ (value MPI))
+
+ Here, the data to be signed is directly given as an MPI.
+
+ For DSA the input data is expected in this format:
+
+ (data
+ (flags raw)
+ (value MPI))
+
+ Here, the data to be signed is directly given as an MPI. It is
+ expect that this MPI is the hash value. For the standard DSA,
+ using a MPI is not a problem in regard to leading zeroes because
+ the hash value is directly used as an MPI. For better standard
+ conformance it would be better to explicitly use a memory string
+ (like with pkcs1) but that is currently not supported. However,
+ for deterministic DSA as specified in RFC6979 this can't be used.
+ Instead the following input is expected.
+
+ (data
+ (flags rfc6979)
+ (hash HASH-ALGO BLOCK))
+
+ Note that the provided hash-algo is used for the internal HMAC; it
+ should match the hash-algo used to create BLOCK.
+
+ The signature is returned as a newly allocated S-expression in
+ R_SIG using this format for RSA:
+
+ (sig-val
+ (rsa
+ (s S-MPI)))
+
+ Where S-MPI is the result of the RSA sign operation. For DSA the
+ S-expression returned is:
+
+ (sig-val
+ (dsa
+ (r R-MPI)
+ (s S-MPI)))
+
+ Where R-MPI and S-MPI are the result of the DSA sign operation.
+
+ For Elgamal signing (which is slow, yields large numbers and
+ probably is not as secure as the other algorithms), the same format
+ is used with "elg" replacing "dsa"; for ECDSA signing, the same
+ format is used with "ecdsa" replacing "dsa".
+
+ For the EdDSA algorithm (cf. Ed25515) the required input
+ parameters are:
+
+ (data
+ (flags eddsa)
+ (hash-algo sha512)
+ (value MESSAGE))
+
+ Note that the MESSAGE may be of any length; hashing is part of the
+ algorithm. Using a large data block for MESSAGE is in general not
+ suggested; in that case the used protocol should better require
+ that a hash of the message is used as input to the EdDSA algorithm.
+ Note that for X.509 certificates MESSAGE is the 'tbsCertificate'
+ part and in CMS MESSAGE is the 'signedAttrs' part; see RFC-8410 and
+ RFC-8419.
+
+The operation most commonly used is definitely the verification of a
+signature. Libgcrypt provides this function:
+
+ -- Function: gcry_error_t gcry_pk_verify (gcry_sexp_t SIG,
+ gcry_sexp_t DATA, gcry_sexp_t PKEY)
+
+ This is used to check whether the signature SIG matches the DATA.
+ The public key PKEY must be provided to perform this verification.
+ This function is similar in its parameters to 'gcry_pk_sign' with
+ the exceptions that the public key is used instead of the private
+ key and that no signature is created but a signature, in a format
+ as created by 'gcry_pk_sign', is passed to the function in SIG.
+
+ The result is 0 for success (i.e. the data matches the signature),
+ or an error code where the most relevant code is
+ 'GCRY_ERR_BAD_SIGNATURE' to indicate that the signature does not
+ match the provided data.
+
+ Additionally, libgcrypt provides three functions for digital
+signatures. Those functions are useful when hashing computation should
+be closely combined with signature computation.
+
+ -- Function: gcry_error_t gcry_pk_hash_sign (gcry_sexp_t *RESULT,
+ const char *DATA_TMPL, gcry_sexp_t SKEY, gcry_md_hd_t HD,
+ gcry_ctx_t CTX)
+
+ This function is a variant of 'gcry_pk_sign' which takes as
+ additional parameter HD, handle for hash, and an optional context
+ CTX. SKEY is a private key in S-expression. The hash algorithm
+ used by the handle needs to be enabled and input needs to be
+ supplied beforehand. DATA-TMPL specifies a template to compose an
+ S-expression to be signed. A template should include '"(hash %s
+ %b)"' or '"(hash ALGONAME %b)"'. For the former case, "%s" is
+ substituted by the string of algorithm of 'gcry_md_get_algo ('HD')'
+ and when 'gcry_md_read' is called, 'ALGO=0' is used internally.
+ For the latter case, hash algorithm by 'ALGONAME' is used when
+ 'gcry_md_read' is called internally. The hash handle must not yet
+ been finalized; the function takes a copy of the state and does a
+ finalize on the copy. The last argument, CTX, may be used for
+ supplying nonce externally. If no need, CTX should be passed as
+ 'NULL'.
+
+ -- Function: gcry_error_t gcry_pk_hash_verify (gcry_sexp_t SIGVAL,
+ const char *DATA_TMPL, gcry_sexp_t PKEY, gcry_md_hd_t HD,
+ gcry_ctx_t CTX)
+
+ This function is a variant of 'gcry_pk_verify' which takes as
+ additional parameter HD, handle for hash, and an optional context
+ CTX. PKEY is a public key in S-expression. See
+ 'gcry_pk_hash_sign', for the explanation of handle for hash,
+ DATA-TMPL and CTX.
+
+ -- Function: gcry_error_t gcry_pk_random_override_new
+ (gcry_ctx_t *R_CTX, const unsigned char *P, size_t LEN)
+
+ This function is used to allocate a new context for nonce, by
+ memory area pointed to by P to LEN bytes. This context can be used
+ when calling 'gcry_pk_hash_sign' or 'gcry_pk_hash_verify' to supply
+ nonce externally, instead of generating internally.
+
+ On success the function returns 0 and stores the new context object
+ at R_CTX; this object eventually needs to be released (*note
+ gcry_ctx_release::). On error the function stores 'NULL' at R_CTX
+ and returns an error code.
+
+\1f
+File: gcrypt.info, Node: Dedicated ECC Functions, Next: General public-key related Functions, Prev: Cryptographic Functions, Up: Public Key cryptography
+
+6.4 Dedicated functions for elliptic curves.
+============================================
+
+The S-expression based interface is not optimal for certain operations
+on elliptic curves. Thus a few special functions are implemented to
+support common operations on curves with one of these assigned curve
+ids:
+
+'GCRY_ECC_CURVE25519'
+'GCRY_ECC_CURVE448'
+
+ -- Function: unsigned int gcry_ecc_get_algo_keylen (int CURVEID);
+
+ Returns the length in bytes of a point on the curve with the id
+ CURVEID. 0 is returned for curves which have no assigned id.
+
+ -- Function: gpg_error_t gcry_ecc_mul_point (int CURVEID,
+ unsigned char *RESULT, const unsigned char *SCALAR,
+ const unsigned char *POINT)
+
+ This function computes the scalar multiplication on the Montgomery
+ form of the curve with id CURVEID. If POINT is 'NULL', the base
+ point of the curve is used. The caller needs to provide a large
+ enough buffer for RESULT and a valid SCALAR and POINT.
+
+\1f
+File: gcrypt.info, Node: General public-key related Functions, Prev: Dedicated ECC Functions, Up: Public Key cryptography
+
+6.5 General public-key related Functions
+========================================
+
+A couple of utility functions are available to retrieve the length of
+the key, map algorithm identifiers and perform sanity checks:
+
+ -- Function: const char * gcry_pk_algo_name (int ALGO)
+
+ Map the public key algorithm id ALGO to a string representation of
+ the algorithm name. For unknown algorithms this functions returns
+ the string '"?"'. This function should not be used to test for the
+ availability of an algorithm.
+
+ -- Function: int gcry_pk_map_name (const char *NAME)
+
+ Map the algorithm NAME to a public key algorithm Id. Returns 0 if
+ the algorithm name is not known.
+
+ -- Function: int gcry_pk_test_algo (int ALGO)
+
+ Return 0 if the public key algorithm ALGO is available for use.
+ Note that this is implemented as a macro.
+
+ -- Function: unsigned int gcry_pk_get_nbits (gcry_sexp_t KEY)
+
+ Return what is commonly referred as the key length for the given
+ public or private key in KEY.
+
+ -- Function: unsigned char * gcry_pk_get_keygrip (gcry_sexp_t KEY,
+ unsigned char *ARRAY)
+
+ Return the so called "keygrip" which is the SHA-1 hash of the
+ public key parameters expressed in a way depended on the algorithm.
+ ARRAY must either provide space for 20 bytes or be 'NULL'. In the
+ latter case a newly allocated array of that size is returned. On
+ success a pointer to the newly allocated space or to ARRAY is
+ returned. 'NULL' is returned to indicate an error which is most
+ likely an unknown algorithm or one where a "keygrip" has not yet
+ been defined. The function accepts public or secret keys in KEY.
+
+ -- Function: gcry_error_t gcry_pk_testkey (gcry_sexp_t KEY)
+
+ Return zero if the private key KEY is 'sane', an error code
+ otherwise. Note that it is not possible to check the 'saneness' of
+ a public key.
+
+ -- Function: gcry_error_t gcry_pk_algo_info (int ALGO, int WHAT,
+ void *BUFFER, size_t *NBYTES)
+
+ Depending on the value of WHAT return various information about the
+ public key algorithm with the id ALGO. Note that the function
+ returns '-1' on error and the actual error code must be retrieved
+ using the function 'gcry_errno'. The currently defined values for
+ WHAT are:
+
+ 'GCRYCTL_TEST_ALGO:'
+ Return 0 if the specified algorithm is available for use.
+ BUFFER must be 'NULL', NBYTES may be passed as 'NULL' or point
+ to a variable with the required usage of the algorithm. This
+ may be 0 for "don't care" or the bit-wise OR of these flags:
+
+ 'GCRY_PK_USAGE_SIGN'
+ Algorithm is usable for signing.
+ 'GCRY_PK_USAGE_ENCR'
+ Algorithm is usable for encryption.
+
+ Unless you need to test for the allowed usage, it is in
+ general better to use the macro gcry_pk_test_algo instead.
+
+ 'GCRYCTL_GET_ALGO_USAGE:'
+ Return the usage flags for the given algorithm. For an
+ invalid algorithm return 0. Disabled algorithms are ignored
+ here because we want to know whether the algorithm is at all
+ capable of a certain usage.
+
+ 'GCRYCTL_GET_ALGO_NPKEY'
+ Return the number of elements the public key for algorithm
+ ALGO consist of. Return 0 for an unknown algorithm.
+
+ 'GCRYCTL_GET_ALGO_NSKEY'
+ Return the number of elements the private key for algorithm
+ ALGO consist of. Note that this value is always larger than
+ that of the public key. Return 0 for an unknown algorithm.
+
+ 'GCRYCTL_GET_ALGO_NSIGN'
+ Return the number of elements a signature created with the
+ algorithm ALGO consists of. Return 0 for an unknown algorithm
+ or for an algorithm not capable of creating signatures.
+
+ 'GCRYCTL_GET_ALGO_NENCR'
+ Return the number of elements a encrypted message created with
+ the algorithm ALGO consists of. Return 0 for an unknown
+ algorithm or for an algorithm not capable of encryption.
+
+ Please note that parameters not required should be passed as
+ 'NULL'.
+
+ -- Function: gcry_error_t gcry_pk_ctl (int CMD, void *BUFFER,
+ size_t BUFLEN)
+
+ This is a general purpose function to perform certain control
+ operations. CMD controls what is to be done. The return value is
+ 0 for success or an error code. Currently supported values for CMD
+ are:
+
+ 'GCRYCTL_DISABLE_ALGO'
+ Disable the algorithm given as an algorithm id in BUFFER.
+ BUFFER must point to an 'int' variable with the algorithm id
+ and BUFLEN must have the value 'sizeof (int)'. This function
+ is not thread safe and should thus be used before any other
+ threads are started.
+
+Libgcrypt also provides a function to generate public key pairs:
+
+ -- Function: gcry_error_t gcry_pk_genkey (gcry_sexp_t *R_KEY,
+ gcry_sexp_t PARMS)
+
+ This function create a new public key pair using information given
+ in the S-expression PARMS and stores the private and the public key
+ in one new S-expression at the address given by R_KEY. In case of
+ an error, R_KEY is set to 'NULL'. The return code is 0 for success
+ or an error code otherwise.
+
+ Here is an example for PARMS to create an 2048 bit RSA key:
+
+ (genkey
+ (rsa
+ (nbits 4:2048)))
+
+ To create an Elgamal key, substitute "elg" for "rsa" and to create
+ a DSA key use "dsa". Valid ranges for the key length depend on the
+ algorithms; all commonly used key lengths are supported. Currently
+ supported parameters are:
+
+ 'nbits'
+ This is always required to specify the length of the key. The
+ argument is a string with a number in C-notation. The value
+ should be a multiple of 8. Note that the S-expression syntax
+ requires that a number is prefixed with its string length;
+ thus the '4:' in the above example.
+
+ 'curve NAME'
+ For ECC a named curve may be used instead of giving the number
+ of requested bits. This allows to request a specific curve to
+ override a default selection Libgcrypt would have taken if
+ 'nbits' has been given. The available names are listed with
+ the description of the ECC public key parameters.
+
+ 'rsa-use-e VALUE'
+ This is only used with RSA to give a hint for the public
+ exponent. The VALUE will be used as a base to test for a
+ usable exponent. Some values are special:
+
+ '0'
+ Use a secure and fast value. This is currently the
+ number 41.
+ '1'
+ Use a value as required by some crypto policies. This is
+ currently the number 65537.
+ '2'
+ Reserved
+ '> 2'
+ Use the given value.
+
+ If this parameter is not used, Libgcrypt uses for historic
+ reasons 65537. Note that the value must fit into a 32 bit
+ unsigned variable and that the usual C prefixes are considered
+ (e.g. 017 gives 15).
+
+ 'qbits N'
+ This is only meanigful for DSA keys. If it is given, the DSA
+ key is generated with a Q parameter of size N bits. If it is
+ not given or zero, Q is deduced from NBITS in this way:
+ '512 <= N <= 1024'
+ Q = 160
+ 'N = 2048'
+ Q = 224
+ 'N = 3072'
+ Q = 256
+ 'N = 7680'
+ Q = 384
+ 'N = 15360'
+ Q = 512
+ Note that in this case only the values for N, as given in the
+ table, are allowed. When specifying Q, all values of N in the
+ range 512 to 15680 are valid as long as they are multiples of
+ 8.
+
+ 'domain LIST'
+ This is only meaningful for DLP algorithms. If specified,
+ keys are generated with domain parameters taken from this
+ list. The exact format of this parameter depends on the
+ actual algorithm. It is currently only implemented for DSA
+ using this format:
+
+ (genkey
+ (dsa
+ (domain
+ (p P-MPI)
+ (q Q-MPI)
+ (g Q-MPI))))
+
+ 'nbits' and 'qbits' may not be specified because they are
+ derived from the domain parameters.
+
+ 'derive-parms LIST'
+ This is currently only implemented for RSA and DSA keys. It
+ is not allowed to use this together with a 'domain'
+ specification. If given, it is used to derive the keys using
+ the given parameters.
+
+ If given for an RSA key, the X9.31 key generation algorithm is
+ used. If given for a DSA key, the FIPS 186 algorithm is used
+ even if libgcrypt is not in FIPS mode.
+
+ (genkey
+ (rsa
+ (nbits 4:1024)
+ (rsa-use-e 1:3)
+ (derive-parms
+ (Xp1 #1A1916DDB29B4EB7EB6732E128#)
+ (Xp2 #192E8AAC41C576C822D93EA433#)
+ (Xp #D8CD81F035EC57EFE822955149D3BFF70C53520D
+ 769D6D76646C7A792E16EBD89FE6FC5B605A6493
+ 39DFC925A86A4C6D150B71B9EEA02D68885F5009
+ B98BD984#)
+ (Xq1 #1A5CF72EE770DE50CB09ACCEA9#)
+ (Xq2 #134E4CAA16D2350A21D775C404#)
+ (Xq #CC1092495D867E64065DEE3E7955F2EBC7D47A2D
+ 7C9953388F97DDDC3E1CA19C35CA659EDC2FC325
+ 6D29C2627479C086A699A49C4C9CEE7EF7BD1B34
+ 321DE34A#))))
+
+ (genkey
+ (dsa
+ (nbits 4:1024)
+ (derive-parms
+ (seed SEED-MPI))))
+
+ 'test-parms LIST'
+ This is currently only implemented for RSA keys. If given,
+ the libgcrypt will not generate parameter, but tests whether
+ the p,q is probably prime. Returns key with zeroes.
+
+ The FIPS key generation algorithm is used even if libgcrypt is
+ not in FIPS mode.
+
+ (genkey
+ (rsa
+ (nbits 4:1024)
+ (rsa-use-e 1:3)
+ (test-parms
+ (e 5:65537)
+ (p #00bbccabcee15d343944a47e492d4b1f4de79633e2
+ 0cbb46f7d2d6813392a807ad048cf77528edd19f77
+ e7453f25173b9dcb70423afa2037aae147b81a33d5
+ 41fc58f875eff1e852ab55e2e09a3debfbc151b3b0
+ d17fef6f74d81fca14fbae531418e211ef818592af
+ 70de5cec3b92795cc3578572bf456099cd8727150e
+ 523261#)
+ (q #00ca87ecf2883f4ed00a9ec65abdeba81d28edbfcc
+ 34ecc563d587f166b52d42bfbe22bbc095b0b8426a
+ 2f8bbc55baaa8859b42cbc376ed3067db3ef7b135b
+ 63481322911ebbd7014db83aa051e0ca2dbf302b75
+ cd37f2ae8df90e134226e92f6353a284b28bb30af0
+ bbf925b345b955328379866ebac11d55bc80fe84f1
+ 05d415#)
+
+
+ 'flags FLAGLIST'
+ This is preferred way to define flags. FLAGLIST may contain
+ any number of flags. See above for a specification of these
+ flags.
+
+ Here is an example on how to create a key using curve Ed25519
+ with the ECDSA signature algorithm. Note that the use of
+ ECDSA with that curve is in general not recommended.
+ (genkey
+ (ecc
+ (flags transient-key)))
+
+ 'transient-key'
+ 'use-x931'
+ 'use-fips186'
+ 'use-fips186-2'
+ These are deprecated ways to set a flag with that name; see
+ above for a description of each flag.
+
+ The key pair is returned in a format depending on the algorithm.
+ Both private and public keys are returned in one container and may
+ be accompanied by some miscellaneous information.
+
+ Here are two examples: the first for Elgamal and the second for
+ elliptic curve key generation:
+
+ (key-data
+ (public-key
+ (elg
+ (p P-MPI)
+ (g G-MPI)
+ (y Y-MPI)))
+ (private-key
+ (elg
+ (p P-MPI)
+ (g G-MPI)
+ (y Y-MPI)
+ (x X-MPI)))
+ (misc-key-info
+ (pm1-factors N1 N2 ... NN))
+
+ (key-data
+ (public-key
+ (ecc
+ (curve Ed25519)
+ (flags eddsa)
+ (q Q-VALUE)))
+ (private-key
+ (ecc
+ (curve Ed25519)
+ (flags eddsa)
+ (q Q-VALUE)
+ (d D-VALUE))))
+
+ As you can see, some of the information is duplicated, but this
+ provides an easy way to extract either the public or the private
+ key. Note that the order of the elements is not defined, e.g. the
+ private key may be stored before the public key. N1 N2 ... NN is a
+ list of prime numbers used to composite P-MPI; this is in general
+ not a very useful information and only available if the key
+ generation algorithm provides them.
+
+Future versions of Libgcrypt will have extended versions of the public
+key interface which will take an additional context to allow for
+pre-computations, special operations, and other optimization. As a
+first step a new function is introduced to help using the ECC algorithms
+in new ways:
+
+ -- Function: gcry_error_t gcry_pubkey_get_sexp (gcry_sexp_t *R_SEXP,
+ int MODE, gcry_ctx_t CTX)
+
+ Return an S-expression representing the context CTX. Depending on
+ the state of that context, the S-expression may either be a public
+ key, a private key or any other object used with public key
+ operations. On success 0 is returned and a new S-expression is
+ stored at R_SEXP; on error an error code is returned and 'NULL' is
+ stored at R_SEXP. MODE must be one of:
+
+ '0'
+ Decide what to return depending on the context. For example
+ if the private key parameter is available, a private key is
+ returned; if not, a public key is returned.
+
+ 'GCRY_PK_GET_PUBKEY'
+ Return the public key even if the context has the private key
+ parameter.
+
+ 'GCRY_PK_GET_SECKEY'
+ Return the private key or the error 'GPG_ERR_NO_SECKEY' if it
+ is not possible.
+
+ As of now this function supports only certain ECC operations
+ because a context object is right now only defined for ECC. Over
+ time this function will be extended to cover more algorithms.
+
+\1f
+File: gcrypt.info, Node: Hashing, Next: Message Authentication Codes, Prev: Public Key cryptography, Up: Top
+
+7 Hashing
+*********
+
+Libgcrypt provides an easy to use and consistent interface for hashing.
+Hashing is buffered and several hash algorithms can be updated at once.
+It is possible to compute a HMAC using the same routines. The
+programming model follows an open/process/close paradigm and is in that
+similar to other building blocks provided by Libgcrypt.
+
+ For convenience reasons, a few cyclic redundancy check value
+operations are also supported.
+
+* Menu:
+
+* Available hash algorithms:: List of hash algorithms supported by the library.
+* Working with hash algorithms:: List of functions related to hashing.
+
+\1f
+File: gcrypt.info, Node: Available hash algorithms, Next: Working with hash algorithms, Up: Hashing
+
+7.1 Available hash algorithms
+=============================
+
+'GCRY_MD_NONE'
+ This is not a real algorithm but used by some functions as an error
+ return value. This constant is guaranteed to have the value '0'.
+
+'GCRY_MD_SHA1'
+ This is the SHA-1 algorithm which yields a message digest of 20
+ bytes. Note that SHA-1 begins to show some weaknesses and it is
+ suggested to fade out its use if strong cryptographic properties
+ are required.
+
+'GCRY_MD_RMD160'
+ This is the 160 bit version of the RIPE message digest
+ (RIPE-MD-160). Like SHA-1 it also yields a digest of 20 bytes.
+ This algorithm shares a lot of design properties with SHA-1 and
+ thus it is advisable not to use it for new protocols.
+
+'GCRY_MD_MD5'
+ This is the well known MD5 algorithm, which yields a message digest
+ of 16 bytes. Note that the MD5 algorithm has severe weaknesses,
+ for example it is easy to compute two messages yielding the same
+ hash (collision attack). The use of this algorithm is only
+ justified for non-cryptographic application.
+
+'GCRY_MD_MD4'
+ This is the MD4 algorithm, which yields a message digest of 16
+ bytes. This algorithm has severe weaknesses and should not be
+ used.
+
+'GCRY_MD_MD2'
+ This is a reserved identifier for MD-2; there is no implementation
+ yet. This algorithm has severe weaknesses and should not be used.
+
+'GCRY_MD_TIGER'
+ This is the TIGER/192 algorithm which yields a message digest of 24
+ bytes. Actually this is a variant of TIGER with a different output
+ print order as used by GnuPG up to version 1.3.2.
+
+'GCRY_MD_TIGER1'
+ This is the TIGER variant as used by the NESSIE project. It uses
+ the most commonly used output print order.
+
+'GCRY_MD_TIGER2'
+ This is another variant of TIGER with a different padding scheme.
+
+'GCRY_MD_HAVAL'
+ This is an reserved value for the HAVAL algorithm with 5 passes and
+ 160 bits. It yields a message digest of 20 bytes. Note that there
+ is no implementation yet available.
+
+'GCRY_MD_SHA224'
+ This is the SHA-224 algorithm which yields a message digest of 28
+ bytes. See Change Notice 1 for FIPS 180-2 for the specification.
+
+'GCRY_MD_SHA256'
+ This is the SHA-256 algorithm which yields a message digest of 32
+ bytes. See FIPS 180-2 for the specification.
+
+'GCRY_MD_SHA384'
+ This is the SHA-384 algorithm which yields a message digest of 48
+ bytes. See FIPS 180-2 for the specification.
+
+'GCRY_MD_SHA512'
+ This is the SHA-512 algorithm which yields a message digest of 64
+ bytes. See FIPS 180-2 for the specification.
+
+'GCRY_MD_SHA512_224'
+ This is the SHA-512/224 algorithm which yields a message digest of
+ 28 bytes. See FIPS 180-4 for the specification.
+
+'GCRY_MD_SHA512_256'
+ This is the SHA-512/256 algorithm which yields a message digest of
+ 32 bytes. See FIPS 180-4 for the specification.
+
+'GCRY_MD_SHA3_224'
+ This is the SHA3-224 algorithm which yields a message digest of 28
+ bytes. See FIPS 202 for the specification.
+
+'GCRY_MD_SHA3_256'
+ This is the SHA3-256 algorithm which yields a message digest of 32
+ bytes. See FIPS 202 for the specification.
+
+'GCRY_MD_SHA3_384'
+ This is the SHA3-384 algorithm which yields a message digest of 48
+ bytes. See FIPS 202 for the specification.
+
+'GCRY_MD_SHA3_512'
+ This is the SHA3-512 algorithm which yields a message digest of 64
+ bytes. See FIPS 202 for the specification.
+
+'GCRY_MD_SHAKE128'
+ This is the SHAKE128 extendable-output function (XOF) algorithm
+ with 128 bit security strength. See FIPS 202 for the
+ specification.
+
+'GCRY_MD_SHAKE256'
+ This is the SHAKE256 extendable-output function (XOF) algorithm
+ with 256 bit security strength. See FIPS 202 for the
+ specification.
+
+'GCRY_MD_CRC32'
+ This is the ISO 3309 and ITU-T V.42 cyclic redundancy check. It
+ yields an output of 4 bytes. Note that this is not a hash
+ algorithm in the cryptographic sense.
+
+'GCRY_MD_CRC32_RFC1510'
+ This is the above cyclic redundancy check function, as modified by
+ RFC 1510. It yields an output of 4 bytes. Note that this is not a
+ hash algorithm in the cryptographic sense.
+
+'GCRY_MD_CRC24_RFC2440'
+ This is the OpenPGP cyclic redundancy check function. It yields an
+ output of 3 bytes. Note that this is not a hash algorithm in the
+ cryptographic sense.
+
+'GCRY_MD_WHIRLPOOL'
+ This is the Whirlpool algorithm which yields a message digest of 64
+ bytes.
+
+'GCRY_MD_GOSTR3411_94'
+ This is the hash algorithm described in GOST R 34.11-94 which
+ yields a message digest of 32 bytes.
+
+'GCRY_MD_STRIBOG256'
+ This is the 256-bit version of hash algorithm described in GOST R
+ 34.11-2012 which yields a message digest of 32 bytes.
+
+'GCRY_MD_STRIBOG512'
+ This is the 512-bit version of hash algorithm described in GOST R
+ 34.11-2012 which yields a message digest of 64 bytes.
+
+'GCRY_MD_BLAKE2B_512'
+ This is the BLAKE2b-512 algorithm which yields a message digest of
+ 64 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_BLAKE2B_384'
+ This is the BLAKE2b-384 algorithm which yields a message digest of
+ 48 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_BLAKE2B_256'
+ This is the BLAKE2b-256 algorithm which yields a message digest of
+ 32 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_BLAKE2B_160'
+ This is the BLAKE2b-160 algorithm which yields a message digest of
+ 20 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_BLAKE2S_256'
+ This is the BLAKE2s-256 algorithm which yields a message digest of
+ 32 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_BLAKE2S_224'
+ This is the BLAKE2s-224 algorithm which yields a message digest of
+ 28 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_BLAKE2S_160'
+ This is the BLAKE2s-160 algorithm which yields a message digest of
+ 20 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_BLAKE2S_128'
+ This is the BLAKE2s-128 algorithm which yields a message digest of
+ 16 bytes. See RFC 7693 for the specification.
+
+'GCRY_MD_SM3'
+ This is the SM3 algorithm which yields a message digest of 32
+ bytes.
+
+\1f
+File: gcrypt.info, Node: Working with hash algorithms, Prev: Available hash algorithms, Up: Hashing
+
+7.2 Working with hash algorithms
+================================
+
+To use most of these function it is necessary to create a context; this
+is done using:
+
+ -- Function: gcry_error_t gcry_md_open (gcry_md_hd_t *HD, int ALGO,
+ unsigned int FLAGS)
+
+ Create a message digest object for algorithm ALGO. FLAGS may be
+ given as an bitwise OR of constants described below. ALGO may be
+ given as '0' if the algorithms to use are later set using
+ 'gcry_md_enable'. HD is guaranteed to either receive a valid
+ handle or 'NULL'.
+
+ For a list of supported algorithms, see *note Available hash
+ algorithms::.
+
+ The flags allowed for MODE are:
+
+ 'GCRY_MD_FLAG_SECURE'
+ Allocate all buffers and the resulting digest in "secure
+ memory". Use this if the hashed data is highly confidential.
+
+ 'GCRY_MD_FLAG_HMAC'
+ Turn the algorithm into a HMAC message authentication
+ algorithm. This only works if just one algorithm is enabled
+ for the handle and that algorithm is not an extendable-output
+ function. Note that the function 'gcry_md_setkey' must be
+ used to set the MAC key. The size of the MAC is equal to the
+ message digest of the underlying hash algorithm. If you want
+ CBC message authentication codes based on a cipher, see *note
+ Working with cipher handles::.
+
+ 'GCRY_MD_FLAG_BUGEMU1'
+ Versions of Libgcrypt before 1.6.0 had a bug in the Whirlpool
+ code which led to a wrong result for certain input sizes and
+ write patterns. Using this flag emulates that bug. This may
+ for example be useful for applications which use Whirlpool as
+ part of their key generation. It is strongly suggested to use
+ this flag only if really needed; and if possible, the data
+ should be re-processed using the regular Whirlpool algorithm.
+
+ Note that this flag works for the entire hash context. If
+ need arises, it may be used to enable bug emulation for other
+ hash algorithms. Thus you should not use this flag for a
+ multi-algorithm hash context.
+
+ You may use the function 'gcry_md_is_enabled' to later check
+ whether an algorithm has been enabled.
+
+ If you want to calculate several hash algorithms at the same time,
+you have to use the following function right after the 'gcry_md_open':
+
+ -- Function: gcry_error_t gcry_md_enable (gcry_md_hd_t H, int ALGO)
+
+ Add the message digest algorithm ALGO to the digest object
+ described by handle H. Duplicated enabling of algorithms is
+ detected and ignored.
+
+ If the flag 'GCRY_MD_FLAG_HMAC' was used, the key for the MAC must be
+set using the function:
+
+ -- Function: gcry_error_t gcry_md_setkey (gcry_md_hd_t H, const void
+ *KEY, size_t KEYLEN)
+
+ For use with the HMAC feature or BLAKE2 keyed hash, set the MAC key
+ to the value of KEY of length KEYLEN bytes. For HMAC, there is no
+ restriction on the length of the key. For keyed BLAKE2b hash,
+ length of the key must be in the range 1 to 64 bytes. For keyed
+ BLAKE2s hash, length of the key must be in the range 1 to 32 bytes.
+
+ After you are done with the hash calculation, you should release the
+resources by using:
+
+ -- Function: void gcry_md_close (gcry_md_hd_t H)
+
+ Release all resources of hash context H. H should not be used
+ after a call to this function. A 'NULL' passed as H is ignored.
+ The function also zeroises all sensitive information associated
+ with this handle.
+
+ Often you have to do several hash operations using the same
+algorithm. To avoid the overhead of creating and releasing context, a
+reset function is provided:
+
+ -- Function: void gcry_md_reset (gcry_md_hd_t H)
+
+ Reset the current context to its initial state. This is
+ effectively identical to a close followed by an open and enabling
+ all currently active algorithms.
+
+ Often it is necessary to start hashing some data and then continue to
+hash different data. To avoid hashing the same data several times
+(which might not even be possible if the data is received from a pipe),
+a snapshot of the current hash context can be taken and turned into a
+new context:
+
+ -- Function: gcry_error_t gcry_md_copy (gcry_md_hd_t *HANDLE_DST,
+ gcry_md_hd_t HANDLE_SRC)
+
+ Create a new digest object as an exact copy of the object described
+ by handle HANDLE_SRC and store it in HANDLE_DST. The context is
+ not reset and you can continue to hash data using this context and
+ independently using the original context.
+
+ Now that we have prepared everything to calculate hashes, it is time
+to see how it is actually done. There are two ways for this: one to
+update the hash with a block of memory and one macro to update the hash
+by just one character. Both methods can be used on the same hash
+context.
+
+ -- Function: void gcry_md_write (gcry_md_hd_t H, const void *BUFFER,
+ size_t LENGTH)
+
+ Pass LENGTH bytes of the data in BUFFER to the digest object with
+ handle H to update the digest values. This function should be used
+ for large blocks of data. If this function is used after the
+ context has been finalized, it will keep on pushing the data
+ through the algorithm specific transform function and change the
+ context; however the results are not meaningful and this feature is
+ only available to mitigate timing attacks.
+
+ -- Function: void gcry_md_putc (gcry_md_hd_t H, int C)
+
+ Pass the byte in C to the digest object with handle H to update the
+ digest value. This is an efficient function, implemented as a
+ macro to buffer the data before an actual update.
+
+ The semantics of the hash functions do not provide for reading out
+intermediate message digests because the calculation must be finalized
+first. This finalization may for example include the number of bytes
+hashed in the message digest or some padding.
+
+ -- Function: void gcry_md_final (gcry_md_hd_t H)
+
+ Finalize the message digest calculation. This is not really needed
+ because 'gcry_md_read' and 'gcry_md_extract' do this implicitly.
+ After this has been done no further updates (by means of
+ 'gcry_md_write' or 'gcry_md_putc') should be done; However, to
+ mitigate timing attacks it is sometimes useful to keep on updating
+ the context after having stored away the actual digest. Only the
+ first call to this function has an effect. It is implemented as a
+ macro.
+
+ The way to read out the calculated message digest is by using the
+function:
+
+ -- Function: unsigned char * gcry_md_read (gcry_md_hd_t H, int ALGO)
+
+ 'gcry_md_read' returns the message digest after finalizing the
+ calculation. This function may be used as often as required but it
+ will always return the same value for one handle. The returned
+ message digest is allocated within the message context and
+ therefore valid until the handle is released or reset-ed (using
+ 'gcry_md_close' or 'gcry_md_reset') or it has been updated as a
+ mitigation measure against timing attacks. ALGO may be given as 0
+ to return the only enabled message digest or it may specify one of
+ the enabled algorithms. The function does return 'NULL' if the
+ requested algorithm has not been enabled.
+
+ The way to read output of extendable-output function is by using the
+function:
+
+ -- Function: gpg_err_code_t gcry_md_extract (gcry_md_hd_t H, int ALGO,
+ void *BUFFER, size_t LENGTH)
+
+ 'gcry_mac_read' returns output from extendable-output function.
+ This function may be used as often as required to generate more
+ output byte stream from the algorithm. Function extracts the new
+ output bytes to BUFFER of the length LENGTH. Buffer will be fully
+ populated with new output. ALGO may be given as 0 to return the
+ only enabled message digest or it may specify one of the enabled
+ algorithms. The function does return non-zero value if the
+ requested algorithm has not been enabled.
+
+ Because it is often necessary to get the message digest of blocks of
+memory, two fast convenience function are available for this task:
+
+ -- Function: gpg_err_code_t gcry_md_hash_buffers ( int ALGO,
+ unsigned int FLAGS, void *DIGEST, const gcry_buffer_t *IOV,
+ int IOVCNT )
+
+ 'gcry_md_hash_buffers' is a shortcut function to calculate a
+ message digest from several buffers. This function does not
+ require a context and immediately returns the message digest of the
+ data described by IOV and IOVCNT. DIGEST must be allocated by the
+ caller, large enough to hold the message digest yielded by the the
+ specified algorithm ALGO. This required size may be obtained by
+ using the function 'gcry_md_get_algo_dlen'.
+
+ IOV is an array of buffer descriptions with IOVCNT items. The
+ caller should zero out the structures in this array and for each
+ array item set the fields '.data' to the address of the data to be
+ hashed, '.len' to number of bytes to be hashed. If .OFF is also
+ set, the data is taken starting at .OFF bytes from the begin of the
+ buffer. The field '.size' is not used.
+
+ The only supported flag value for FLAGS is GCRY_MD_FLAG_HMAC which
+ turns this function into a HMAC function; the first item in IOV is
+ then used as the key.
+
+ On success the function returns 0 and stores the resulting hash or
+ MAC at DIGEST.
+
+ -- Function: void gcry_md_hash_buffer (int ALGO, void *DIGEST, const
+ void *BUFFER, size_t LENGTH);
+
+ 'gcry_md_hash_buffer' is a shortcut function to calculate a message
+ digest of a buffer. This function does not require a context and
+ immediately returns the message digest of the LENGTH bytes at
+ BUFFER. DIGEST must be allocated by the caller, large enough to
+ hold the message digest yielded by the specified algorithm ALGO.
+ This required size may be obtained by using the function
+ 'gcry_md_get_algo_dlen'.
+
+ Note that in contrast to 'gcry_md_hash_buffers' this function will
+ abort the process if an unavailable algorithm is used.
+
+ Hash algorithms are identified by internal algorithm numbers (see
+'gcry_md_open' for a list). However, in most applications they are used
+by names, so two functions are available to map between string
+representations and hash algorithm identifiers.
+
+ -- Function: const char * gcry_md_algo_name (int ALGO)
+
+ Map the digest algorithm id ALGO to a string representation of the
+ algorithm name. For unknown algorithms this function returns the
+ string '"?"'. This function should not be used to test for the
+ availability of an algorithm.
+
+ -- Function: int gcry_md_map_name (const char *NAME)
+
+ Map the algorithm with NAME to a digest algorithm identifier.
+ Returns 0 if the algorithm name is not known. Names representing
+ ASN.1 object identifiers are recognized if the IETF dotted format
+ is used and the OID is prefixed with either "'oid.'" or "'OID.'".
+ For a list of supported OIDs, see the source code at 'cipher/md.c'.
+ This function should not be used to test for the availability of an
+ algorithm.
+
+ -- Function: gcry_error_t gcry_md_get_asnoid (int ALGO, void *BUFFER,
+ size_t *LENGTH)
+
+ Return an DER encoded ASN.1 OID for the algorithm ALGO in the user
+ allocated BUFFER. LENGTH must point to variable with the available
+ size of BUFFER and receives after return the actual size of the
+ returned OID. The returned error code may be 'GPG_ERR_TOO_SHORT' if
+ the provided buffer is too short to receive the OID; it is possible
+ to call the function with 'NULL' for BUFFER to have it only return
+ the required size. The function returns 0 on success.
+
+ To test whether an algorithm is actually available for use, the
+following macro should be used:
+
+ -- Function: gcry_error_t gcry_md_test_algo (int ALGO)
+
+ The macro returns 0 if the algorithm ALGO is available for use.
+
+ If the length of a message digest is not known, it can be retrieved
+using the following function:
+
+ -- Function: unsigned int gcry_md_get_algo_dlen (int ALGO)
+
+ Retrieve the length in bytes of the digest yielded by algorithm
+ ALGO. This is often used prior to 'gcry_md_read' to allocate
+ sufficient memory for the digest.
+
+ In some situations it might be hard to remember the algorithm used
+for the ongoing hashing. The following function might be used to get
+that information:
+
+ -- Function: int gcry_md_get_algo (gcry_md_hd_t H)
+
+ Retrieve the algorithm used with the handle H. Note that this does
+ not work reliable if more than one algorithm is enabled in H.
+
+ The following macro might also be useful:
+
+ -- Function: int gcry_md_is_secure (gcry_md_hd_t H)
+
+ This function returns true when the digest object H is allocated in
+ "secure memory"; i.e. H was created with the
+ 'GCRY_MD_FLAG_SECURE'.
+
+ -- Function: int gcry_md_is_enabled (gcry_md_hd_t H, int ALGO)
+
+ This function returns true when the algorithm ALGO has been enabled
+ for the digest object H.
+
+ Tracking bugs related to hashing is often a cumbersome task which
+requires to add a lot of printf statements into the code. Libgcrypt
+provides an easy way to avoid this. The actual data hashed can be
+written to files on request.
+
+ -- Function: void gcry_md_debug (gcry_md_hd_t H, const char *SUFFIX)
+
+ Enable debugging for the digest object with handle H. This creates
+ files named 'dbgmd-<n>.<string>' while doing the actual hashing.
+ SUFFIX is the string part in the filename. The number is a counter
+ incremented for each new hashing. The data in the file is the raw
+ data as passed to 'gcry_md_write' or 'gcry_md_putc'. If 'NULL' is
+ used for SUFFIX, the debugging is stopped and the file closed.
+ This is only rarely required because 'gcry_md_close' implicitly
+ stops debugging.
+
+\1f
+File: gcrypt.info, Node: Message Authentication Codes, Next: Key Derivation, Prev: Hashing, Up: Top
+
+8 Message Authentication Codes
+******************************
+
+Libgcrypt provides an easy to use and consistent interface for
+generating Message Authentication Codes (MAC). MAC generation is
+buffered and interface similar to the one used with hash algorithms.
+The programming model follows an open/process/close paradigm and is in
+that similar to other building blocks provided by Libgcrypt.
+
+* Menu:
+
+* Available MAC algorithms:: List of MAC algorithms supported by the library.
+* Working with MAC algorithms:: List of functions related to MAC algorithms.
+
+\1f
+File: gcrypt.info, Node: Available MAC algorithms, Next: Working with MAC algorithms, Up: Message Authentication Codes
+
+8.1 Available MAC algorithms
+============================
+
+'GCRY_MAC_NONE'
+ This is not a real algorithm but used by some functions as an error
+ return value. This constant is guaranteed to have the value '0'.
+
+'GCRY_MAC_HMAC_SHA256'
+ This is keyed-hash message authentication code (HMAC) message
+ authentication algorithm based on the SHA-256 hash algorithm.
+
+'GCRY_MAC_HMAC_SHA224'
+ This is HMAC message authentication algorithm based on the SHA-224
+ hash algorithm.
+
+'GCRY_MAC_HMAC_SHA512'
+ This is HMAC message authentication algorithm based on the SHA-512
+ hash algorithm.
+
+'GCRY_MAC_HMAC_SHA384'
+ This is HMAC message authentication algorithm based on the SHA-384
+ hash algorithm.
+
+'GCRY_MAC_HMAC_SHA3_256'
+ This is HMAC message authentication algorithm based on the SHA3-256
+ hash algorithm.
+
+'GCRY_MAC_HMAC_SHA3_224'
+ This is HMAC message authentication algorithm based on the SHA3-224
+ hash algorithm.
+
+'GCRY_MAC_HMAC_SHA3_512'
+ This is HMAC message authentication algorithm based on the SHA3-512
+ hash algorithm.
+
+'GCRY_MAC_HMAC_SHA3_384'
+ This is HMAC message authentication algorithm based on the SHA3-384
+ hash algorithm.
+
+'GCRY_MAC_HMAC_SHA512_224'
+ This is HMAC message authentication algorithm based on the
+ SHA-512/224 hash algorithm.
+
+'GCRY_MAC_HMAC_SHA512_256'
+ This is HMAC message authentication algorithm based on the
+ SHA-512/256 hash algorithm.
+
+'GCRY_MAC_HMAC_SHA1'
+ This is HMAC message authentication algorithm based on the SHA-1
+ hash algorithm.
+
+'GCRY_MAC_HMAC_MD5'
+ This is HMAC message authentication algorithm based on the MD5 hash
+ algorithm.
+
+'GCRY_MAC_HMAC_MD4'
+ This is HMAC message authentication algorithm based on the MD4 hash
+ algorithm.
+
+'GCRY_MAC_HMAC_RMD160'
+ This is HMAC message authentication algorithm based on the
+ RIPE-MD-160 hash algorithm.
+
+'GCRY_MAC_HMAC_WHIRLPOOL'
+ This is HMAC message authentication algorithm based on the
+ WHIRLPOOL hash algorithm.
+
+'GCRY_MAC_HMAC_GOSTR3411_94'
+ This is HMAC message authentication algorithm based on the GOST R
+ 34.11-94 hash algorithm.
+
+'GCRY_MAC_HMAC_STRIBOG256'
+ This is HMAC message authentication algorithm based on the 256-bit
+ hash algorithm described in GOST R 34.11-2012.
+
+'GCRY_MAC_HMAC_STRIBOG512'
+ This is HMAC message authentication algorithm based on the 512-bit
+ hash algorithm described in GOST R 34.11-2012.
+
+'GCRY_MAC_HMAC_BLAKE2B_512'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2b-512 hash algorithm.
+
+'GCRY_MAC_HMAC_BLAKE2B_384'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2b-384 hash algorithm.
+
+'GCRY_MAC_HMAC_BLAKE2B_256'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2b-256 hash algorithm.
+
+'GCRY_MAC_HMAC_BLAKE2B_160'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2b-160 hash algorithm.
+
+'GCRY_MAC_HMAC_BLAKE2S_256'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2s-256 hash algorithm.
+
+'GCRY_MAC_HMAC_BLAKE2S_224'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2s-224 hash algorithm.
+
+'GCRY_MAC_HMAC_BLAKE2S_160'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2s-160 hash algorithm.
+
+'GCRY_MAC_HMAC_BLAKE2S_128'
+ This is HMAC message authentication algorithm based on the
+ BLAKE2s-128 hash algorithm.
+
+'GCRY_MAC_HMAC_SM3'
+ This is HMAC message authentication algorithm based on the SM3 hash
+ algorithm.
+
+'GCRY_MAC_CMAC_AES'
+ This is CMAC (Cipher-based MAC) message authentication algorithm
+ based on the AES block cipher algorithm.
+
+'GCRY_MAC_CMAC_3DES'
+ This is CMAC message authentication algorithm based on the
+ three-key EDE Triple-DES block cipher algorithm.
+
+'GCRY_MAC_CMAC_CAMELLIA'
+ This is CMAC message authentication algorithm based on the Camellia
+ block cipher algorithm.
+
+'GCRY_MAC_CMAC_CAST5'
+ This is CMAC message authentication algorithm based on the
+ CAST128-5 block cipher algorithm.
+
+'GCRY_MAC_CMAC_BLOWFISH'
+ This is CMAC message authentication algorithm based on the Blowfish
+ block cipher algorithm.
+
+'GCRY_MAC_CMAC_TWOFISH'
+ This is CMAC message authentication algorithm based on the Twofish
+ block cipher algorithm.
+
+'GCRY_MAC_CMAC_SERPENT'
+ This is CMAC message authentication algorithm based on the Serpent
+ block cipher algorithm.
+
+'GCRY_MAC_CMAC_SEED'
+ This is CMAC message authentication algorithm based on the SEED
+ block cipher algorithm.
+
+'GCRY_MAC_CMAC_RFC2268'
+ This is CMAC message authentication algorithm based on the Ron's
+ Cipher 2 block cipher algorithm.
+
+'GCRY_MAC_CMAC_IDEA'
+ This is CMAC message authentication algorithm based on the IDEA
+ block cipher algorithm.
+
+'GCRY_MAC_CMAC_GOST28147'
+ This is CMAC message authentication algorithm based on the GOST
+ 28147-89 block cipher algorithm.
+
+'GCRY_MAC_CMAC_SM4'
+ This is CMAC message authentication algorithm based on the SM4
+ block cipher algorithm.
+
+'GCRY_MAC_GMAC_AES'
+ This is GMAC (GCM mode based MAC) message authentication algorithm
+ based on the AES block cipher algorithm.
+
+'GCRY_MAC_GMAC_CAMELLIA'
+ This is GMAC message authentication algorithm based on the Camellia
+ block cipher algorithm.
+
+'GCRY_MAC_GMAC_TWOFISH'
+ This is GMAC message authentication algorithm based on the Twofish
+ block cipher algorithm.
+
+'GCRY_MAC_GMAC_SERPENT'
+ This is GMAC message authentication algorithm based on the Serpent
+ block cipher algorithm.
+
+'GCRY_MAC_GMAC_SEED'
+ This is GMAC message authentication algorithm based on the SEED
+ block cipher algorithm.
+
+'GCRY_MAC_POLY1305'
+ This is plain Poly1305 message authentication algorithm, used with
+ one-time key.
+
+'GCRY_MAC_POLY1305_AES'
+ This is Poly1305-AES message authentication algorithm, used with
+ key and one-time nonce.
+
+'GCRY_MAC_POLY1305_CAMELLIA'
+ This is Poly1305-Camellia message authentication algorithm, used
+ with key and one-time nonce.
+
+'GCRY_MAC_POLY1305_TWOFISH'
+ This is Poly1305-Twofish message authentication algorithm, used
+ with key and one-time nonce.
+
+'GCRY_MAC_POLY1305_SERPENT'
+ This is Poly1305-Serpent message authentication algorithm, used
+ with key and one-time nonce.
+
+'GCRY_MAC_POLY1305_SEED'
+ This is Poly1305-SEED message authentication algorithm, used with
+ key and one-time nonce.
+
+'GCRY_MAC_GOST28147_IMIT'
+ This is MAC construction defined in GOST 28147-89 (see RFC 5830
+ Section 8).
+
+\1f
+File: gcrypt.info, Node: Working with MAC algorithms, Prev: Available MAC algorithms, Up: Message Authentication Codes
+
+8.2 Working with MAC algorithms
+===============================
+
+To use most of these function it is necessary to create a context; this
+is done using:
+
+ -- Function: gcry_error_t gcry_mac_open (gcry_mac_hd_t *HD, int ALGO,
+ unsigned int FLAGS, gcry_ctx_t CTX)
+
+ Create a MAC object for algorithm ALGO. FLAGS may be given as a
+ bitwise OR of constants described below. HD is guaranteed to
+ either receive a valid handle or 'NULL'. CTX is context object to
+ associate MAC object with. CTX maybe set to 'NULL'.
+
+ For a list of supported algorithms, see *note Available MAC
+ algorithms::.
+
+ The flags allowed for MODE are:
+
+ 'GCRY_MAC_FLAG_SECURE'
+ Allocate all buffers and the resulting MAC in "secure memory".
+ Use this if the MAC data is highly confidential.
+
+ In order to use a handle for performing MAC algorithm operations, a
+'key' has to be set first:
+
+ -- Function: gcry_error_t gcry_mac_setkey (gcry_mac_hd_t H, const void
+ *KEY, size_t KEYLEN)
+
+ Set the MAC key to the value of KEY of length KEYLEN bytes. With
+ HMAC algorithms, there is no restriction on the length of the key.
+ With CMAC algorithms, the length of the key is restricted to those
+ supported by the underlying block cipher.
+
+ GMAC algorithms and Poly1305-with-cipher algorithms need
+initialization vector to be set, which can be performed with function:
+
+ -- Function: gcry_error_t gcry_mac_setiv (gcry_mac_hd_t H, const void
+ *IV, size_t IVLEN)
+
+ Set the IV to the value of IV of length IVLEN bytes.
+
+ After you are done with the MAC calculation, you should release the
+resources by using:
+
+ -- Function: void gcry_mac_close (gcry_mac_hd_t H)
+
+ Release all resources of MAC context H. H should not be used after
+ a call to this function. A 'NULL' passed as H is ignored. The
+ function also clears all sensitive information associated with this
+ handle.
+
+ Often you have to do several MAC operations using the same algorithm.
+To avoid the overhead of creating and releasing context, a reset
+function is provided:
+
+ -- Function: gcry_error_t gcry_mac_reset (gcry_mac_hd_t H)
+
+ Reset the current context to its initial state. This is
+ effectively identical to a close followed by an open and setting
+ same key.
+
+ Note that gcry_mac_reset is implemented as a macro.
+
+ Now that we have prepared everything to calculate MAC, it is time to
+see how it is actually done.
+
+ -- Function: gcry_error_t gcry_mac_write (gcry_mac_hd_t H, const void
+ *BUFFER, size_t LENGTH)
+
+ Pass LENGTH bytes of the data in BUFFER to the MAC object with
+ handle H to update the MAC values. If this function is used after
+ the context has been finalized, it will keep on pushing the data
+ through the algorithm specific transform function and thereby
+ change the context; however the results are not meaningful and this
+ feature is only available to mitigate timing attacks.
+
+ The way to read out the calculated MAC is by using the function:
+
+ -- Function: gcry_error_t gcry_mac_read (gcry_mac_hd_t H, void *BUFFER,
+ size_t *LENGTH)
+
+ 'gcry_mac_read' returns the MAC after finalizing the calculation.
+ Function copies the resulting MAC value to BUFFER of the length
+ LENGTH. If LENGTH is larger than length of resulting MAC value,
+ then length of MAC is returned through LENGTH.
+
+ To compare existing MAC value with recalculated MAC, one is to use
+the function:
+
+ -- Function: gcry_error_t gcry_mac_verify (gcry_mac_hd_t H, void
+ *BUFFER, size_t LENGTH)
+
+ 'gcry_mac_verify' finalizes MAC calculation and compares result
+ with LENGTH bytes of data in BUFFER. Error code 'GPG_ERR_CHECKSUM'
+ is returned if the MAC value in the buffer BUFFER does not match
+ the MAC calculated in object H.
+
+ In some situations it might be hard to remember the algorithm used
+for the MAC calculation. The following function might be used to get
+that information:
+
+ -- Function: int gcry_mac_get_algo (gcry_mac_hd_t H)
+
+ Retrieve the algorithm used with the handle H.
+
+ MAC algorithms are identified by internal algorithm numbers (see
+'gcry_mac_open' for a list). However, in most applications they are
+used by names, so two functions are available to map between string
+representations and MAC algorithm identifiers.
+
+ -- Function: const char * gcry_mac_algo_name (int ALGO)
+
+ Map the MAC algorithm id ALGO to a string representation of the
+ algorithm name. For unknown algorithms this function returns the
+ string '"?"'. This function should not be used to test for the
+ availability of an algorithm.
+
+ -- Function: int gcry_mac_map_name (const char *NAME)
+
+ Map the algorithm with NAME to a MAC algorithm identifier. Returns
+ 0 if the algorithm name is not known. This function should not be
+ used to test for the availability of an algorithm.
+
+ To test whether an algorithm is actually available for use, the
+following macro should be used:
+
+ -- Function: gcry_error_t gcry_mac_test_algo (int ALGO)
+
+ The macro returns 0 if the MAC algorithm ALGO is available for use.
+
+ If the length of a message digest is not known, it can be retrieved
+using the following function:
+
+ -- Function: unsigned int gcry_mac_get_algo_maclen (int ALGO)
+
+ Retrieve the length in bytes of the MAC yielded by algorithm ALGO.
+ This is often used prior to 'gcry_mac_read' to allocate sufficient
+ memory for the MAC value. On error '0' is returned.
+
+ -- Function: unsigned int gcry_mac_get_algo_keylen (ALGO)
+
+ This function returns length of the key for MAC algorithm ALGO. If
+ the algorithm supports multiple key lengths, the default supported
+ key length is returned. On error '0' is returned. The key length
+ is returned as number of octets.
+
+\1f
+File: gcrypt.info, Node: Key Derivation, Next: Random Numbers, Prev: Message Authentication Codes, Up: Top
+
+9 Key Derivation
+****************
+
+Libgcypt provides a general purpose function to derive keys from
+strings.
+
+ -- Function: gpg_error_t gcry_kdf_derive ( const void *PASSPHRASE,
+ size_t PASSPHRASELEN, int ALGO, int SUBALGO, const void *SALT,
+ size_t SALTLEN, unsigned long ITERATIONS, size_t KEYSIZE,
+ void *KEYBUFFER )
+
+ Derive a key from a passphrase. KEYSIZE gives the requested size
+ of the key in octets. KEYBUFFER is a caller provided buffer filled
+ on success with the derived key. The input passphrase is taken
+ from PASSPHRASE which is an arbitrary memory buffer of
+ PASSPHRASELEN octets. ALGO specifies the KDF algorithm to use; see
+ below. SUBALGO specifies an algorithm used internally by the KDF
+ algorithms; this is usually a hash algorithm but certain KDF
+ algorithms may use it differently. SALT is a salt of length
+ SALTLEN octets, as needed by most KDF algorithms. ITERATIONS is a
+ positive integer parameter to most KDFs.
+
+ On success 0 is returned; on failure an error code.
+
+ Currently supported KDFs (parameter ALGO):
+
+ 'GCRY_KDF_SIMPLE_S2K'
+ The OpenPGP simple S2K algorithm (cf. RFC4880). Its use is
+ strongly deprecated. SALT and ITERATIONS are not needed and
+ may be passed as 'NULL'/'0'.
+
+ 'GCRY_KDF_SALTED_S2K'
+ The OpenPGP salted S2K algorithm (cf. RFC4880). Usually not
+ used. ITERATIONS is not needed and may be passed as '0'.
+ SALTLEN must be given as 8.
+
+ 'GCRY_KDF_ITERSALTED_S2K'
+ The OpenPGP iterated+salted S2K algorithm (cf. RFC4880).
+ This is the default for most OpenPGP applications. SALTLEN
+ must be given as 8. Note that OpenPGP defines a special
+ encoding of the ITERATIONS; however this function takes the
+ plain decoded iteration count.
+
+ 'GCRY_KDF_PBKDF2'
+ The PKCS#5 Passphrase Based Key Derivation Function number 2.
+
+ 'GCRY_KDF_SCRYPT'
+ The SCRYPT Key Derivation Function. The subalgorithm is used
+ to specify the CPU/memory cost parameter N, and the number of
+ iterations is used for the parallelization parameter p. The
+ block size is fixed at 8 in the current implementation.
+
+\1f
+File: gcrypt.info, Node: Random Numbers, Next: S-expressions, Prev: Key Derivation, Up: Top
+
+10 Random Numbers
+*****************
+
+* Menu:
+
+* Quality of random numbers:: Libgcrypt uses different quality levels.
+* Retrieving random numbers:: How to retrieve random numbers.
+
+\1f
+File: gcrypt.info, Node: Quality of random numbers, Next: Retrieving random numbers, Up: Random Numbers
+
+10.1 Quality of random numbers
+==============================
+
+Libgcypt offers random numbers of different quality levels:
+
+ -- Data type: gcry_random_level_t
+ The constants for the random quality levels are of this enum type.
+
+'GCRY_WEAK_RANDOM'
+ For all functions, except for 'gcry_mpi_randomize', this level maps
+ to 'GCRY_STRONG_RANDOM'. If you do not want this, consider using
+ 'gcry_create_nonce'.
+'GCRY_STRONG_RANDOM'
+ Use this level for session keys and similar purposes.
+'GCRY_VERY_STRONG_RANDOM'
+ Use this level for long term key material.
+
+\1f
+File: gcrypt.info, Node: Retrieving random numbers, Prev: Quality of random numbers, Up: Random Numbers
+
+10.2 Retrieving random numbers
+==============================
+
+ -- Function: void gcry_randomize (unsigned char *BUFFER, size_t LENGTH,
+ enum gcry_random_level LEVEL)
+
+ Fill BUFFER with LENGTH random bytes using a random quality as
+ defined by LEVEL.
+
+ -- Function: void * gcry_random_bytes (size_t NBYTES, enum
+ gcry_random_level LEVEL)
+
+ Convenience function to allocate a memory block consisting of
+ NBYTES fresh random bytes using a random quality as defined by
+ LEVEL.
+
+ -- Function: void * gcry_random_bytes_secure (size_t NBYTES, enum
+ gcry_random_level LEVEL)
+
+ Convenience function to allocate a memory block consisting of
+ NBYTES fresh random bytes using a random quality as defined by
+ LEVEL. This function differs from 'gcry_random_bytes' in that the
+ returned buffer is allocated in a "secure" area of the memory.
+
+ -- Function: void gcry_create_nonce (unsigned char *BUFFER, size_t
+ LENGTH)
+
+ Fill BUFFER with LENGTH unpredictable bytes. This is commonly
+ called a nonce and may also be used for initialization vectors and
+ padding. This is an extra function nearly independent of the other
+ random function for 3 reasons: It better protects the regular
+ random generator's internal state, provides better performance and
+ does not drain the precious entropy pool.
+
+\1f
+File: gcrypt.info, Node: S-expressions, Next: MPI library, Prev: Random Numbers, Up: Top
+
+11 S-expressions
+****************
+
+S-expressions are used by the public key functions to pass complex data
+structures around. These LISP like objects are used by some
+cryptographic protocols (cf. RFC-2692) and Libgcrypt provides functions
+to parse and construct them. For detailed information, see 'Ron Rivest,
+code and description of S-expressions,
+<http://theory.lcs.mit.edu/~rivest/sexp.html>'.
+
+* Menu:
+
+* Data types for S-expressions:: Data types related to S-expressions.
+* Working with S-expressions:: How to work with S-expressions.
+
+\1f
+File: gcrypt.info, Node: Data types for S-expressions, Next: Working with S-expressions, Up: S-expressions
+
+11.1 Data types for S-expressions
+=================================
+
+ -- Data type: gcry_sexp_t
+ The 'gcry_sexp_t' type describes an object with the Libgcrypt
+ internal representation of an S-expression.
+
+\1f
+File: gcrypt.info, Node: Working with S-expressions, Prev: Data types for S-expressions, Up: S-expressions
+
+11.2 Working with S-expressions
+===============================
+
+There are several functions to create an Libgcrypt S-expression object
+from its external representation or from a string template. There is
+also a function to convert the internal representation back into one of
+the external formats:
+
+ -- Function: gcry_error_t gcry_sexp_new (gcry_sexp_t *R_SEXP,
+ const void *BUFFER, size_t LENGTH, int AUTODETECT)
+
+ This is the generic function to create an new S-expression object
+ from its external representation in BUFFER of LENGTH bytes. On
+ success the result is stored at the address given by R_SEXP. With
+ AUTODETECT set to 0, the data in BUFFER is expected to be in
+ canonized format, with AUTODETECT set to 1 the function parses any
+ of the defined external formats. If BUFFER does not hold a valid
+ S-expression, an error code is returned and R_SEXP set to 'NULL'.
+ Note that the caller is responsible for releasing the newly
+ allocated S-expression using 'gcry_sexp_release'.
+
+ -- Function: gcry_error_t gcry_sexp_create (gcry_sexp_t *R_SEXP,
+ void *BUFFER, size_t LENGTH, int AUTODETECT,
+ void (*FREEFNC)(void*))
+
+ This function is identical to 'gcry_sexp_new' but has an extra
+ argument FREEFNC, which, when not set to 'NULL', is expected to be
+ a function to release the BUFFER; most likely the standard 'free'
+ function is used for this argument. This has the effect of
+ transferring the ownership of BUFFER to the created object in
+ R_SEXP. The advantage of using this function is that Libgcrypt
+ might decide to directly use the provided buffer and thus avoid
+ extra copying.
+
+ -- Function: gcry_error_t gcry_sexp_sscan (gcry_sexp_t *R_SEXP,
+ size_t *ERROFF, const char *BUFFER, size_t LENGTH)
+
+ This is another variant of the above functions. It behaves nearly
+ identical but provides an ERROFF argument which will receive the
+ offset into the buffer where the parsing stopped on error.
+
+ -- Function: gcry_error_t gcry_sexp_build (gcry_sexp_t *R_SEXP,
+ size_t *ERROFF, const char *FORMAT, ...)
+
+ This function creates an internal S-expression from the string
+ template FORMAT and stores it at the address of R_SEXP. If there
+ is a parsing error, the function returns an appropriate error code
+ and stores the offset into FORMAT where the parsing stopped in
+ ERROFF. The function supports a couple of printf-like formatting
+ characters and expects arguments for some of these escape sequences
+ right after FORMAT. The following format characters are defined:
+
+ '%m'
+ The next argument is expected to be of type 'gcry_mpi_t' and a
+ copy of its value is inserted into the resulting S-expression.
+ The MPI is stored as a signed integer.
+ '%M'
+ The next argument is expected to be of type 'gcry_mpi_t' and a
+ copy of its value is inserted into the resulting S-expression.
+ The MPI is stored as an unsigned integer.
+ '%s'
+ The next argument is expected to be of type 'char *' and that
+ string is inserted into the resulting S-expression.
+ '%d'
+ The next argument is expected to be of type 'int' and its
+ value is inserted into the resulting S-expression.
+ '%u'
+ The next argument is expected to be of type 'unsigned int' and
+ its value is inserted into the resulting S-expression.
+ '%b'
+ The next argument is expected to be of type 'int' directly
+ followed by an argument of type 'char *'. This represents a
+ buffer of given length to be inserted into the resulting
+ S-expression.
+ '%S'
+ The next argument is expected to be of type 'gcry_sexp_t' and
+ a copy of that S-expression is embedded in the resulting
+ S-expression. The argument needs to be a regular
+ S-expression, starting with a parenthesis.
+
+ No other format characters are defined and would return an error.
+ Note that the format character '%%' does not exists, because a
+ percent sign is not a valid character in an S-expression.
+
+ -- Function: void gcry_sexp_release (gcry_sexp_t SEXP)
+
+ Release the S-expression object SEXP. If the S-expression is
+ stored in secure memory, it explicitly zeroises that memory; note
+ that this is done in addition to the zeroisation always done when
+ freeing secure memory.
+
+The next 2 functions are used to convert the internal representation
+back into a regular external S-expression format and to show the
+structure for debugging.
+
+ -- Function: size_t gcry_sexp_sprint (gcry_sexp_t SEXP, int MODE,
+ char *BUFFER, size_t MAXLENGTH)
+
+ Copies the S-expression object SEXP into BUFFER using the format
+ specified in MODE. MAXLENGTH must be set to the allocated length
+ of BUFFER. The function returns the actual length of valid bytes
+ put into BUFFER or 0 if the provided buffer is too short. Passing
+ 'NULL' for BUFFER returns the required length for BUFFER. For
+ convenience reasons an extra byte with value 0 is appended to the
+ buffer.
+
+ The following formats are supported:
+
+ 'GCRYSEXP_FMT_DEFAULT'
+ Returns a convenient external S-expression representation.
+
+ 'GCRYSEXP_FMT_CANON'
+ Return the S-expression in canonical format.
+
+ 'GCRYSEXP_FMT_BASE64'
+ Not currently supported.
+
+ 'GCRYSEXP_FMT_ADVANCED'
+ Returns the S-expression in advanced format.
+
+ -- Function: void gcry_sexp_dump (gcry_sexp_t SEXP)
+
+ Dumps SEXP in a format suitable for debugging to Libgcrypt's
+ logging stream.
+
+Often canonical encoding is used in the external representation. The
+following function can be used to check for valid encoding and to learn
+the length of the S-expression.
+
+ -- Function: size_t gcry_sexp_canon_len (const unsigned char *BUFFER,
+ size_t LENGTH, size_t *ERROFF, int *ERRCODE)
+
+ Scan the canonical encoded BUFFER with implicit length values and
+ return the actual length this S-expression uses. For a valid
+ S-expression it should never return 0. If LENGTH is not 0, the
+ maximum length to scan is given; this can be used for syntax checks
+ of data passed from outside. ERRCODE and ERROFF may both be passed
+ as 'NULL'.
+
+There are functions to parse S-expressions and retrieve elements:
+
+ -- Function: gcry_sexp_t gcry_sexp_find_token (const gcry_sexp_t LIST,
+ const char *TOKEN, size_t TOKLEN)
+
+ Scan the S-expression for a sublist with a type (the car of the
+ list) matching the string TOKEN. If TOKLEN is not 0, the token is
+ assumed to be raw memory of this length. The function returns a
+ newly allocated S-expression consisting of the found sublist or
+ 'NULL' when not found.
+
+ -- Function: int gcry_sexp_length (const gcry_sexp_t LIST)
+
+ Return the length of the LIST. For a valid S-expression this
+ should be at least 1.
+
+ -- Function: gcry_sexp_t gcry_sexp_nth (const gcry_sexp_t LIST,
+ int NUMBER)
+
+ Create and return a new S-expression from the element with index
+ NUMBER in LIST. Note that the first element has the index 0. If
+ there is no such element, 'NULL' is returned.
+
+ -- Function: gcry_sexp_t gcry_sexp_car (const gcry_sexp_t LIST)
+
+ Create and return a new S-expression from the first element in
+ LIST; this is called the "type" and should always exist per
+ S-expression specification and in general be a string. 'NULL' is
+ returned in case of a problem.
+
+ -- Function: gcry_sexp_t gcry_sexp_cdr (const gcry_sexp_t LIST)
+
+ Create and return a new list form all elements except for the first
+ one. Note that this function may return an invalid S-expression
+ because it is not guaranteed that the type exists and is a string.
+ However, for parsing a complex S-expression it might be useful for
+ intermediate lists. Returns 'NULL' on error.
+
+ -- Function: const char * gcry_sexp_nth_data (const gcry_sexp_t LIST,
+ int NUMBER, size_t *DATALEN)
+
+ This function is used to get data from a LIST. A pointer to the
+ actual data with index NUMBER is returned and the length of this
+ data will be stored to DATALEN. If there is no data at the given
+ index or the index represents another list, 'NULL' is returned.
+ *Caution:* The returned pointer is valid as long as LIST is not
+ modified or released.
+
+ Here is an example on how to extract and print the surname (Meier)
+ from the S-expression '(Name Otto Meier (address Burgplatz 3))':
+
+ size_t len;
+ const char *name;
+
+ name = gcry_sexp_nth_data (list, 2, &len);
+ printf ("my name is %.*s\n", (int)len, name);
+
+ -- Function: void * gcry_sexp_nth_buffer (const gcry_sexp_t LIST,
+ int NUMBER, size_t *RLENGTH)
+
+ This function is used to get data from a LIST. A malloced buffer
+ with the actual data at list index NUMBER is returned and the
+ length of this buffer will be stored to RLENGTH. If there is no
+ data at the given index or the index represents another list,
+ 'NULL' is returned. The caller must release the result using
+ 'gcry_free'.
+
+ Here is an example on how to extract and print the CRC value from
+ the S-expression '(hash crc32 #23ed00d7)':
+
+ size_t len;
+ char *value;
+
+ value = gcry_sexp_nth_buffer (list, 2, &len);
+ if (value)
+ fwrite (value, len, 1, stdout);
+ gcry_free (value);
+
+ -- Function: char * gcry_sexp_nth_string (gcry_sexp_t LIST, int NUMBER)
+
+ This function is used to get and convert data from a LIST. The
+ data is assumed to be a Nul terminated string. The caller must
+ release this returned value using 'gcry_free'. If there is no data
+ at the given index, the index represents a list or the value can't
+ be converted to a string, 'NULL' is returned.
+
+ -- Function: gcry_mpi_t gcry_sexp_nth_mpi (gcry_sexp_t LIST,
+ int NUMBER, int MPIFMT)
+
+ This function is used to get and convert data from a LIST. This
+ data is assumed to be an MPI stored in the format described by
+ MPIFMT and returned as a standard Libgcrypt MPI. The caller must
+ release this returned value using 'gcry_mpi_release'. If there is
+ no data at the given index, the index represents a list or the
+ value can't be converted to an MPI, 'NULL' is returned. If you use
+ this function to parse results of a public key function, you most
+ likely want to use 'GCRYMPI_FMT_USG'.
+
+ -- Function: gpg_error_t gcry_sexp_extract_param ( gcry_sexp_t SEXP,
+ const char *PATH, const char *LIST, ...)
+
+ Extract parameters from an S-expression using a list of parameter
+ names. The names of these parameters are specified in LIST. White
+ space between the parameter names are ignored. Some special
+ characters and character sequences may be given to control the
+ conversion:
+
+ '+'
+ Switch to unsigned integer format ('GCRYMPI_FMT_USG'). This
+ is the default mode.
+ '-'
+ Switch to standard signed format ('GCRYMPI_FMT_STD').
+ '/'
+ Switch to opaque MPI format. The resulting MPIs may not be
+ used for computations; see 'gcry_mpi_get_opaque' for details.
+ '&'
+ Switch to buffer descriptor mode. See below for details.
+ '%s'
+ Switch to string mode. The expected argument is the address
+ of a 'char *' variable; the caller must release that value.
+ If the parameter was marked optional and is not found, 'NULL'
+ is stored.
+ '%#s'
+ Switch to multi string mode. The expected argument is the
+ address of a 'char *' variable; the caller must release that
+ value. If the parameter was marked optional and is not found,
+ 'NULL' is stored. A multi string takes all values, assumes
+ they are strings and concatenates them using a space as
+ delimiter. In case a value is actually another list, this is
+ not further parsed but a '()' is inserted in place of that
+ sublist.
+ '%u'
+ Switch to unsigned integer mode. The expected argument is
+ address of a 'unsigned int' variable.
+ '%lu'
+ Switch to unsigned long integer mode. The expected argument
+ is address of a 'unsigned long' variable.
+ '%d'
+ Switch to signed integer mode. The expected argument is
+ address of a 'int' variable.
+ '%ld'
+ Switch to signed long integer mode. The expected argument is
+ address of a 'long' variable.
+ '%zu'
+ Switch to size_t mode. The expected argument is address of a
+ 'size_t' variable.
+ '?'
+ If immediately following a parameter letter (no white space
+ allowed), that parameter is considered optional.
+
+ In general, parameter names are single letters. To use a string
+ for a parameter name, enclose the name in single quotes.
+
+ Unless in buffer descriptor mode, for each parameter name a pointer
+ to an 'gcry_mpi_t' variable is expected that must be set to 'NULL'
+ prior to invoking this function, and finally a 'NULL' is expected.
+ For example
+
+ gcry_sexp_extract_param (key, NULL, "n/x+e d-'foo'",
+ &mpi_n, &mpi_x, &mpi_e, &mpi_d, &mpi_foo, NULL)
+
+ stores the parameter 'n' from KEY as an unsigned MPI into MPI_N,
+ the parameter 'x' as an opaque MPI into MPI_X, the parameters 'e'
+ and 'd' again as an unsigned MPI into MPI_E and MPI_D and finally
+ the parameter 'foo' as a signed MPI into MPI_FOO.
+
+ PATH is an optional string used to locate a token. The exclamation
+ mark separated tokens are used via 'gcry_sexp_find_token' to find a
+ start point inside the S-expression.
+
+ In buffer descriptor mode a pointer to a 'gcry_buffer_t' descriptor
+ is expected instead of a pointer to an MPI. The caller may use two
+ different operation modes here: If the DATA field of the provided
+ descriptor is 'NULL', the function allocates a new buffer and
+ stores it at DATA; the other fields are set accordingly with OFF
+ set to 0. If DATA is not 'NULL', the function assumes that the
+ DATA, SIZE, and OFF fields specify a buffer where to put the value
+ of the respective parameter; on return the LEN field receives the
+ number of bytes copied to that buffer; in case the buffer is too
+ small, the function immediately returns with an error code (and LEN
+ is set to 0).
+
+ The function returns 0 on success. On error an error code is
+ returned, all passed MPIs that might have been allocated up to this
+ point are deallocated and set to 'NULL', and all passed buffers are
+ either truncated if the caller supplied the buffer, or deallocated
+ if the function allocated the buffer.
+
+\1f
+File: gcrypt.info, Node: MPI library, Next: Prime numbers, Prev: S-expressions, Up: Top
+
+12 MPI library
+**************
+
+* Menu:
+
+* Data types:: MPI related data types.
+* Basic functions:: First steps with MPI numbers.
+* MPI formats:: External representation of MPIs.
+* Calculations:: Performing MPI calculations.
+* Comparisons:: How to compare MPI values.
+* Bit manipulations:: How to access single bits of MPI values.
+* EC functions:: Elliptic curve related functions.
+* Miscellaneous:: Miscellaneous MPI functions.
+
+Public key cryptography is based on mathematics with large numbers. To
+implement the public key functions, a library for handling these large
+numbers is required. Because of the general usefulness of such a
+library, its interface is exposed by Libgcrypt. In the context of
+Libgcrypt and in most other applications, these large numbers are called
+MPIs (multi-precision-integers).
+
+\1f
+File: gcrypt.info, Node: Data types, Next: Basic functions, Up: MPI library
+
+12.1 Data types
+===============
+
+ -- Data type: gcry_mpi_t
+ This type represents an object to hold an MPI.
+
+ -- Data type: gcry_mpi_point_t
+ This type represents an object to hold a point for elliptic curve
+ math.
+
+\1f
+File: gcrypt.info, Node: Basic functions, Next: MPI formats, Prev: Data types, Up: MPI library
+
+12.2 Basic functions
+====================
+
+To work with MPIs, storage must be allocated and released for the
+numbers. This can be done with one of these functions:
+
+ -- Function: gcry_mpi_t gcry_mpi_new (unsigned int NBITS)
+
+ Allocate a new MPI object, initialize it to 0 and initially
+ allocate enough memory for a number of at least NBITS. This
+ pre-allocation is only a small performance issue and not actually
+ necessary because Libgcrypt automatically re-allocates the required
+ memory.
+
+ -- Function: gcry_mpi_t gcry_mpi_snew (unsigned int NBITS)
+
+ This is identical to 'gcry_mpi_new' but allocates the MPI in the so
+ called "secure memory" which in turn will take care that all
+ derived values will also be stored in this "secure memory". Use
+ this for highly confidential data like private key parameters.
+
+ -- Function: gcry_mpi_t gcry_mpi_copy (const gcry_mpi_t A)
+
+ Create a new MPI as the exact copy of A but with the constant and
+ immutable flags cleared.
+
+ -- Function: void gcry_mpi_release (gcry_mpi_t A)
+
+ Release the MPI A and free all associated resources. Passing
+ 'NULL' is allowed and ignored. When a MPI stored in the "secure
+ memory" is released, that memory gets wiped out immediately.
+
+The simplest operations are used to assign a new value to an MPI:
+
+ -- Function: gcry_mpi_t gcry_mpi_set (gcry_mpi_t W, const gcry_mpi_t U)
+
+ Assign the value of U to W and return W. If 'NULL' is passed for
+ W, a new MPI is allocated, set to the value of U and returned.
+
+ -- Function: gcry_mpi_t gcry_mpi_set_ui (gcry_mpi_t W, unsigned long U)
+
+ Assign the value of U to W and return W. If 'NULL' is passed for
+ W, a new MPI is allocated, set to the value of U and returned.
+ This function takes an 'unsigned int' as type for U and thus it is
+ only possible to set W to small values (usually up to the word size
+ of the CPU).
+
+ -- Function: gcry_error_t gcry_mpi_get_ui (unsigned int *W,
+ gcry_mpi_t U)
+
+ If U is not negative and small enough to be stored in an 'unsigned
+ int' variable, store its value at W. If the value does not fit or
+ is negative, return 'GPG_ERR_ERANGE' and do not change the value
+ stored at W. Note that this function returns an 'unsigned int' so
+ that this value can immediately be used with the bit test
+ functions. This is in contrast to the other "_ui" functions which
+ allow for values up to an 'unsigned long'.
+
+ -- Function: void gcry_mpi_swap (gcry_mpi_t A, gcry_mpi_t B)
+
+ Swap the values of A and B.
+
+ -- Function: void gcry_mpi_snatch (gcry_mpi_t W, const gcry_mpi_t U)
+
+ Set U into W and release U. If W is 'NULL', only U will be
+ released.
+
+ -- Function: void gcry_mpi_neg (gcry_mpi_t W, gcry_mpi_t U)
+
+ Set the sign of W to the negative of U.
+
+ -- Function: void gcry_mpi_abs (gcry_mpi_t W)
+
+ Clear the sign of W.
+
+\1f
+File: gcrypt.info, Node: MPI formats, Next: Calculations, Prev: Basic functions, Up: MPI library
+
+12.3 MPI formats
+================
+
+The following functions are used to convert between an external
+representation of an MPI and the internal one of Libgcrypt.
+
+ -- Function: gcry_error_t gcry_mpi_scan (gcry_mpi_t *R_MPI,
+ enum gcry_mpi_format FORMAT, const unsigned char *BUFFER,
+ size_t BUFLEN, size_t *NSCANNED)
+
+ Convert the external representation of an integer stored in BUFFER
+ with a length of BUFLEN into a newly created MPI returned which
+ will be stored at the address of R_MPI. For certain formats the
+ length argument is not required and should be passed as '0'. A
+ BUFLEN larger than 16 MiB will be rejected. After a successful
+ operation the variable NSCANNED receives the number of bytes
+ actually scanned unless NSCANNED was given as 'NULL'. FORMAT
+ describes the format of the MPI as stored in BUFFER:
+
+ 'GCRYMPI_FMT_STD'
+ 2-complement stored without a length header. Note that
+ 'gcry_mpi_print' stores a '0' as a string of zero length.
+
+ 'GCRYMPI_FMT_PGP'
+ As used by OpenPGP (only defined as unsigned). This is
+ basically 'GCRYMPI_FMT_STD' with a 2 byte big endian length
+ header. A length header indicating a length of more than
+ 16384 is not allowed.
+
+ 'GCRYMPI_FMT_SSH'
+ As used in the Secure Shell protocol. This is
+ 'GCRYMPI_FMT_STD' with a 4 byte big endian header.
+
+ 'GCRYMPI_FMT_HEX'
+ Stored as a string with each byte of the MPI encoded as 2 hex
+ digits. Negative numbers are prefixed with a minus sign and
+ in addition the high bit is always zero to make clear that an
+ explicit sign ist used. When using this format, BUFLEN must
+ be zero.
+
+ 'GCRYMPI_FMT_USG'
+ Simple unsigned integer.
+
+ Note that all of the above formats store the integer in big-endian
+ format (MSB first). Leading zeroes are stripped unless they are
+ required to keep a value positive.
+
+ -- Function: gcry_error_t gcry_mpi_print (enum gcry_mpi_format FORMAT,
+ unsigned char *BUFFER, size_t BUFLEN, size_t *NWRITTEN,
+ const gcry_mpi_t A)
+
+ Convert the MPI A into an external representation described by
+ FORMAT (see above) and store it in the provided BUFFER which has a
+ usable length of at least BUFLEN bytes. If NWRITTEN is not 'NULL',
+ it will receive the number of bytes actually stored in BUFFER after
+ a successful operation.
+
+ -- Function: gcry_error_t gcry_mpi_aprint (enum gcry_mpi_format FORMAT,
+ unsigned char **BUFFER, size_t *NBYTES, const gcry_mpi_t A)
+
+ Convert the MPI A into an external representation described by
+ FORMAT (see above) and store it in a newly allocated buffer which
+ address will be stored in the variable BUFFER points to. The
+ number of bytes stored in this buffer will be stored in the
+ variable NBYTES points to, unless NBYTES is 'NULL'.
+
+ Even if NBYTES is zero, the function allocates at least one byte
+ and store a zero there. Thus with formats 'GCRYMPI_FMT_STD' and
+ 'GCRYMPI_FMT_USG' the caller may safely set a returned length of 0
+ to 1 to represent a zero as a 1 byte string.
+
+ -- Function: void gcry_mpi_dump (const gcry_mpi_t A)
+
+ Dump the value of A in a format suitable for debugging to
+ Libgcrypt's logging stream. Note that one leading space but no
+ trailing space or linefeed will be printed. It is okay to pass
+ 'NULL' for A.
+
+\1f
+File: gcrypt.info, Node: Calculations, Next: Comparisons, Prev: MPI formats, Up: MPI library
+
+12.4 Calculations
+=================
+
+Basic arithmetic operations:
+
+ -- Function: void gcry_mpi_add (gcry_mpi_t W, gcry_mpi_t U,
+ gcry_mpi_t V)
+
+ W = U + V.
+
+ -- Function: void gcry_mpi_add_ui (gcry_mpi_t W, gcry_mpi_t U,
+ unsigned long V)
+
+ W = U + V. Note that V is an unsigned integer.
+
+ -- Function: void gcry_mpi_addm (gcry_mpi_t W, gcry_mpi_t U,
+ gcry_mpi_t V, gcry_mpi_t M)
+
+ W = U + V \bmod M.
+
+ -- Function: void gcry_mpi_sub (gcry_mpi_t W, gcry_mpi_t U,
+ gcry_mpi_t V)
+
+ W = U - V.
+
+ -- Function: void gcry_mpi_sub_ui (gcry_mpi_t W, gcry_mpi_t U,
+ unsigned long V)
+
+ W = U - V. V is an unsigned integer.
+
+ -- Function: void gcry_mpi_subm (gcry_mpi_t W, gcry_mpi_t U,
+ gcry_mpi_t V, gcry_mpi_t M)
+
+ W = U - V \bmod M.
+
+ -- Function: void gcry_mpi_mul (gcry_mpi_t W, gcry_mpi_t U,
+ gcry_mpi_t V)
+
+ W = U * V.
+
+ -- Function: void gcry_mpi_mul_ui (gcry_mpi_t W, gcry_mpi_t U,
+ unsigned long V)
+
+ W = U * V. V is an unsigned integer.
+
+ -- Function: void gcry_mpi_mulm (gcry_mpi_t W, gcry_mpi_t U,
+ gcry_mpi_t V, gcry_mpi_t M)
+
+ W = U * V \bmod M.
+
+ -- Function: void gcry_mpi_mul_2exp (gcry_mpi_t W, gcry_mpi_t U,
+ unsigned long E)
+
+ W = U * 2^e.
+
+ -- Function: void gcry_mpi_div (gcry_mpi_t Q, gcry_mpi_t R,
+ gcry_mpi_t DIVIDEND, gcry_mpi_t DIVISOR, int ROUND)
+
+ Q = DIVIDEND / DIVISOR, R = DIVIDEND \bmod DIVISOR. Q and R may be
+ passed as 'NULL'. ROUND is either negative for floored division
+ (rounds towards the next lower integer) or zero for truncated
+ division (rounds towards zero).
+
+ -- Function: void gcry_mpi_mod (gcry_mpi_t R, gcry_mpi_t DIVIDEND,
+ gcry_mpi_t DIVISOR)
+
+ R = DIVIDEND \bmod DIVISOR.
+
+ -- Function: void gcry_mpi_powm (gcry_mpi_t W, const gcry_mpi_t B,
+ const gcry_mpi_t E, const gcry_mpi_t M)
+
+ W = B^e \bmod M.
+
+ -- Function: int gcry_mpi_gcd (gcry_mpi_t G, gcry_mpi_t A,
+ gcry_mpi_t B)
+
+ Set G to the greatest common divisor of A and B. Return true if G
+ is 1.
+
+ -- Function: int gcry_mpi_invm (gcry_mpi_t X, gcry_mpi_t A,
+ gcry_mpi_t M)
+
+ Set X to the multiplicative inverse of A \bmod M. Return true if
+ the inverse exists.
+
+\1f
+File: gcrypt.info, Node: Comparisons, Next: Bit manipulations, Prev: Calculations, Up: MPI library
+
+12.5 Comparisons
+================
+
+The next 2 functions are used to compare MPIs:
+
+ -- Function: int gcry_mpi_cmp (const gcry_mpi_t U, const gcry_mpi_t V)
+
+ Compare the multi-precision-integers number U and V, returning 0
+ for equality, a positive value for U > V and a negative for U < V.
+ If both numbers are opaque values (cf. 'gcry_mpi_set_opaque'), the
+ comparison is done by checking the bit sizes using memcmp. If only
+ one number is an opaque value, the opaque value is less than the
+ other number.
+
+ -- Function: int gcry_mpi_cmp_ui (const gcry_mpi_t U, unsigned long V)
+
+ Compare the multi-precision-integers number U with the unsigned
+ integer V, returning 0 for equality, a positive value for U > V and
+ a negative for U < V.
+
+ -- Function: int gcry_mpi_is_neg (const gcry_mpi_t A)
+
+ Return 1 if A is less than zero; return 0 if zero or positive.
+
+\1f
+File: gcrypt.info, Node: Bit manipulations, Next: EC functions, Prev: Comparisons, Up: MPI library
+
+12.6 Bit manipulations
+======================
+
+There are a couple of functions to get information on arbitrary bits in
+an MPI and to set or clear them:
+
+ -- Function: unsigned int gcry_mpi_get_nbits (gcry_mpi_t A)
+
+ Return the number of bits required to represent A.
+
+ -- Function: int gcry_mpi_test_bit (gcry_mpi_t A, unsigned int N)
+
+ Return true if bit number N (counting from 0) is set in A.
+
+ -- Function: void gcry_mpi_set_bit (gcry_mpi_t A, unsigned int N)
+
+ Set bit number N in A.
+
+ -- Function: void gcry_mpi_clear_bit (gcry_mpi_t A, unsigned int N)
+
+ Clear bit number N in A.
+
+ -- Function: void gcry_mpi_set_highbit (gcry_mpi_t A, unsigned int N)
+
+ Set bit number N in A and clear all bits greater than N.
+
+ -- Function: void gcry_mpi_clear_highbit (gcry_mpi_t A, unsigned int N)
+
+ Clear bit number N in A and all bits greater than N.
+
+ -- Function: void gcry_mpi_rshift (gcry_mpi_t X, gcry_mpi_t A,
+ unsigned int N)
+
+ Shift the value of A by N bits to the right and store the result in
+ X.
+
+ -- Function: void gcry_mpi_lshift (gcry_mpi_t X, gcry_mpi_t A,
+ unsigned int N)
+
+ Shift the value of A by N bits to the left and store the result in
+ X.
+
+\1f
+File: gcrypt.info, Node: EC functions, Next: Miscellaneous, Prev: Bit manipulations, Up: MPI library
+
+12.7 EC functions
+=================
+
+Libgcrypt provides an API to access low level functions used by its
+elliptic curve implementation. These functions allow to implement
+elliptic curve methods for which no explicit support is available.
+
+ -- Function: gcry_mpi_point_t gcry_mpi_point_new (unsigned int NBITS)
+
+ Allocate a new point object, initialize it to 0, and allocate
+ enough memory for a points of at least NBITS. This pre-allocation
+ yields only a small performance win and is not really necessary
+ because Libgcrypt automatically re-allocates the required memory.
+ Using 0 for NBITS is usually the right thing to do.
+
+ -- Function: void gcry_mpi_point_release (gcry_mpi_point_t POINT)
+
+ Release POINT and free all associated resources. Passing 'NULL' is
+ allowed and ignored.
+
+ -- Function: gcry_mpi_point_t gcry_mpi_point_copy
+ (gcry_mpi_point_t POINT)
+
+ Allocate and return a new point object and initialize it with
+ POINT. If POINT is 'NULL', the function is identical to
+ 'gcry_mpi_point_new(0)'.
+
+ -- Function: void gcry_mpi_point_get (gcry_mpi_t X, gcry_mpi_t Y,
+ gcry_mpi_t Z, gcry_mpi_point_t POINT)
+
+ Store the projective coordinates from POINT into the MPIs X, Y, and
+ Z. If a coordinate is not required, 'NULL' may be used for X, Y,
+ or Z.
+
+ -- Function: void gcry_mpi_point_snatch_get (gcry_mpi_t X,
+ gcry_mpi_t Y, gcry_mpi_t Z, gcry_mpi_point_t POINT)
+
+ Store the projective coordinates from POINT into the MPIs X, Y, and
+ Z. If a coordinate is not required, 'NULL' may be used for X, Y,
+ or Z. The object POINT is then released. Using this function
+ instead of 'gcry_mpi_point_get' and 'gcry_mpi_point_release' has
+ the advantage of avoiding some extra memory allocations and copies.
+
+ -- Function: gcry_mpi_point_t gcry_mpi_point_set (
+ gcry_mpi_point_t POINT, gcry_mpi_t X, gcry_mpi_t Y,
+ gcry_mpi_t Z)
+
+ Store the projective coordinates from X, Y, and Z into POINT. If a
+ coordinate is given as 'NULL', the value 0 is used. If 'NULL' is
+ used for POINT, a new point object is allocated and returned.
+ Returns POINT or the newly allocated point object.
+
+ -- Function: gcry_mpi_point_t gcry_mpi_point_snatch_set (
+ gcry_mpi_point_t POINT, gcry_mpi_t X, gcry_mpi_t Y,
+ gcry_mpi_t Z)
+
+ Store the projective coordinates from X, Y, and Z into POINT. If a
+ coordinate is given as 'NULL', the value 0 is used. If 'NULL' is
+ used for POINT, a new point object is allocated and returned. The
+ MPIs X, Y, and Z are released. Using this function instead of
+ 'gcry_mpi_point_set' and 3 calls to 'gcry_mpi_release' has the
+ advantage of avoiding some extra memory allocations and copies.
+ Returns POINT or the newly allocated point object.
+
+ -- Function: gpg_error_t gcry_mpi_ec_new (gcry_ctx_t *R_CTX,
+ gcry_sexp_t KEYPARAM, const char *CURVENAME)
+
+ Allocate a new context for elliptic curve operations. If KEYPARAM
+ is given, it specifies the parameters of the curve (*note
+ ecc_keyparam::). If CURVENAME is given in addition to KEYPARAM and
+ the key parameters do not include a named curve reference, the
+ string CURVENAME is used to fill in missing parameters. If only
+ CURVENAME is given, the context is initialized for this named
+ curve.
+
+ If a parameter specifying a point (e.g. 'g' or 'q') is not found,
+ the parser looks for a non-encoded point by appending '.x', '.y',
+ and '.z' to the parameter name and looking them all up to create a
+ point. A parameter with the suffix '.z' is optional and defaults
+ to 1.
+
+ On success the function returns 0 and stores the new context object
+ at R_CTX; this object eventually needs to be released (*note
+ gcry_ctx_release::). On error the function stores 'NULL' at R_CTX
+ and returns an error code.
+
+ -- Function: gcry_mpi_t gcry_mpi_ec_get_mpi ( const char *NAME,
+ gcry_ctx_t CTX, int COPY)
+
+ Return the MPI with NAME from the context CTX. If not found,
+ 'NULL' is returned. If the returned MPI may later be modified, it
+ is suggested to pass '1' to COPY, so that the function guarantees
+ that a modifiable copy of the MPI is returned. If '0' is used for
+ COPY, this function may return a constant flagged MPI. In any case
+ 'gcry_mpi_release' needs to be called to release the result. For
+ valid names, see *note ecc_keyparam::. If the public key 'q' is
+ requested but only the private key 'd' is available, 'q' will be
+ recomputed on the fly. If a point parameter is requested, it is
+ returned as an uncompressed encoded point unless these special
+ names are used:
+ Q@EDDSA
+ Return an EdDSA style compressed point. This is only
+ supported for Twisted Edwards curves.
+
+ -- Function: gcry_mpi_point_t gcry_mpi_ec_get_point ( const char *NAME,
+ gcry_ctx_t CTX, int COPY)
+
+ Return the point with NAME from the context CTX. If not found,
+ 'NULL' is returned. If the returned MPI may later be modified, it
+ is suggested to pass '1' to COPY, so that the function guarantees
+ that a modifiable copy of the MPI is returned. If '0' is used for
+ COPY, this function may return a constant flagged point. In any
+ case 'gcry_mpi_point_release' needs to be called to release the
+ result. If the public key 'q' is requested but only the private
+ key 'd' is available, 'q' will be recomputed on the fly.
+
+ -- Function: gpg_error_t gcry_mpi_ec_set_mpi ( const char *NAME,
+ gcry_mpi_t NEWVALUE, gcry_ctx_t CTX)
+
+ Store the MPI NEWVALUE at NAME into the context CTX. On success
+ '0' is returned; on error an error code. Valid names are the MPI
+ parameters of an elliptic curve (*note ecc_keyparam::).
+
+ -- Function: gpg_error_t gcry_mpi_ec_set_point ( const char *NAME,
+ gcry_mpi_point_t NEWVALUE, gcry_ctx_t CTX)
+
+ Store the point NEWVALUE at NAME into the context CTX. On success
+ '0' is returned; on error an error code. Valid names are the point
+ parameters of an elliptic curve (*note ecc_keyparam::).
+
+ -- Function: gpg_err_code_t gcry_mpi_ec_decode_point (
+ mpi_point_t RESULT, gcry_mpi_t VALUE, gcry_ctx_t CTX)
+
+ Decode the point given as an MPI in VALUE and store at RESULT. To
+ decide which encoding is used the function takes a context CTX
+ which can be created with 'gcry_mpi_ec_new'. If 'NULL' is given
+ for the context, the function assumes a 0x04 prefixed uncompressed
+ encoding. On error an error code is returned and RESULT might be
+ changed.
+
+ -- Function: int gcry_mpi_ec_get_affine ( gcry_mpi_t X, gcry_mpi_t Y,
+ gcry_mpi_point_t POINT, gcry_ctx_t CTX)
+
+ Compute the affine coordinates from the projective coordinates in
+ POINT and store them into X and Y. If one coordinate is not
+ required, 'NULL' may be passed to X or Y. CTX is the context
+ object which has been created using 'gcry_mpi_ec_new'. Returns 0
+ on success or not 0 if POINT is at infinity.
+
+ Note that you can use 'gcry_mpi_ec_set_point' with the value
+ 'GCRYMPI_CONST_ONE' for Z to convert affine coordinates back into
+ projective coordinates.
+
+ -- Function: void gcry_mpi_ec_dup ( gcry_mpi_point_t W,
+ gcry_mpi_point_t U, gcry_ctx_t CTX)
+
+ Double the point U of the elliptic curve described by CTX and store
+ the result into W.
+
+ -- Function: void gcry_mpi_ec_add ( gcry_mpi_point_t W,
+ gcry_mpi_point_t U, gcry_mpi_point_t V, gcry_ctx_t CTX)
+
+ Add the points U and V of the elliptic curve described by CTX and
+ store the result into W.
+
+ -- Function: void gcry_mpi_ec_sub ( gcry_mpi_point_t W,
+ gcry_mpi_point_t U, gcry_mpi_point_t V, gcry_ctx_t CTX)
+
+ Subtracts the point V from the point U of the elliptic curve
+ described by CTX and store the result into W. Only Twisted Edwards
+ curves are supported for now.
+
+ -- Function: void gcry_mpi_ec_mul ( gcry_mpi_point_t W, gcry_mpi_t N,
+ gcry_mpi_point_t U, gcry_ctx_t CTX)
+
+ Multiply the point U of the elliptic curve described by CTX by N
+ and store the result into W.
+
+ -- Function: int gcry_mpi_ec_curve_point ( gcry_mpi_point_t POINT,
+ gcry_ctx_t CTX)
+
+ Return true if POINT is on the elliptic curve described by CTX.
+
+\1f
+File: gcrypt.info, Node: Miscellaneous, Prev: EC functions, Up: MPI library
+
+12.8 Miscellaneous
+==================
+
+An MPI data type is allowed to be "misused" to store an arbitrary value.
+Two functions implement this kludge:
+
+ -- Function: gcry_mpi_t gcry_mpi_set_opaque (gcry_mpi_t A, void *P,
+ unsigned int NBITS)
+
+ Store NBITS of the value P points to in A and mark A as an opaque
+ value (i.e. an value that can't be used for any math calculation
+ and is only used to store an arbitrary bit pattern in A).
+ Ownership of P is taken by this function and thus the user may not
+ dereference the passed value anymore. It is required that the
+ memory referenced by P has been allocated in a way that 'gcry_free'
+ is able to release it.
+
+ WARNING: Never use an opaque MPI for actual math operations. The
+ only valid functions are 'gcry_mpi_get_opaque' and
+ 'gcry_mpi_release'. Use 'gcry_mpi_scan' to convert a string of
+ arbitrary bytes into an MPI.
+
+ -- Function: gcry_mpi_t gcry_mpi_set_opaque_copy (gcry_mpi_t A,
+ const void *P, unsigned int NBITS)
+
+ Same as 'gcry_mpi_set_opaque' but ownership of P is not taken;
+ instead a copy of P is used.
+
+ -- Function: void * gcry_mpi_get_opaque (gcry_mpi_t A,
+ unsigned int *NBITS)
+
+ Return a pointer to an opaque value stored in A and return its size
+ in NBITS. Note that the returned pointer is still owned by A and
+ that the function should never be used for an non-opaque MPI.
+
+ Each MPI has an associated set of flags for special purposes. The
+currently defined flags are:
+
+'GCRYMPI_FLAG_SECURE'
+ Setting this flag converts A into an MPI stored in "secure memory".
+ Clearing this flag is not allowed.
+'GCRYMPI_FLAG_OPAQUE'
+ This is an internal flag, indicating that an opaque value and not
+ an integer is stored. This is an read-only flag; it may not be set
+ or cleared.
+'GCRYMPI_FLAG_IMMUTABLE'
+ If this flag is set, the MPI is marked as immutable. Setting or
+ changing the value of that MPI is ignored and an error message is
+ logged. The flag is sometimes useful for debugging.
+'GCRYMPI_FLAG_CONST'
+ If this flag is set, the MPI is marked as a constant and as
+ immutable Setting or changing the value of that MPI is ignored and
+ an error message is logged. Such an MPI will never be deallocated
+ and may thus be used without copying. Note that using
+ 'gcry_mpi_copy' will return a copy of that constant with this and
+ the immutable flag cleared. A few commonly used constants are
+ pre-defined and accessible using the macros 'GCRYMPI_CONST_ONE',
+ 'GCRYMPI_CONST_TWO', 'GCRYMPI_CONST_THREE', 'GCRYMPI_CONST_FOUR',
+ and 'GCRYMPI_CONST_EIGHT'.
+'GCRYMPI_FLAG_USER1'
+'GCRYMPI_FLAG_USER2'
+'GCRYMPI_FLAG_USER3'
+'GCRYMPI_FLAG_USER4'
+ These flags are reserved for use by the application.
+
+ -- Function: void gcry_mpi_set_flag (gcry_mpi_t A,
+ enum gcry_mpi_flag FLAG)
+
+ Set the FLAG for the MPI A. The only allowed flags are
+ 'GCRYMPI_FLAG_SECURE', 'GCRYMPI_FLAG_IMMUTABLE', and
+ 'GCRYMPI_FLAG_CONST'.
+
+ -- Function: void gcry_mpi_clear_flag (gcry_mpi_t A,
+ enum gcry_mpi_flag FLAG)
+
+ Clear FLAG for the multi-precision-integers A. The only allowed
+ flag is 'GCRYMPI_FLAG_IMMUTABLE' but only if 'GCRYMPI_FLAG_CONST'
+ is not set. If 'GCRYMPI_FLAG_CONST' is set, clearing
+ 'GCRYMPI_FLAG_IMMUTABLE' will simply be ignored.
+
+ -- Function: int gcry_mpi_get_flag (gcry_mpi_t A,
+ enum gcry_mpi_flag FLAG)
+
+ Return true if FLAG is set for A.
+
+ To put a random value into an MPI, the following convenience function
+may be used:
+
+ -- Function: void gcry_mpi_randomize (gcry_mpi_t W, unsigned int NBITS,
+ enum gcry_random_level LEVEL)
+
+ Set the multi-precision-integers W to a random non-negative number
+ of NBITS, using random data quality of level LEVEL. In case NBITS
+ is not a multiple of a byte, NBITS is rounded up to the next byte
+ boundary. When using a LEVEL of 'GCRY_WEAK_RANDOM', this function
+ makes use of 'gcry_create_nonce'.
+
+\1f
+File: gcrypt.info, Node: Prime numbers, Next: Utilities, Prev: MPI library, Up: Top
+
+13 Prime numbers
+****************
+
+* Menu:
+
+* Generation:: Generation of new prime numbers.
+* Checking:: Checking if a given number is prime.
+
+\1f
+File: gcrypt.info, Node: Generation, Next: Checking, Up: Prime numbers
+
+13.1 Generation
+===============
+
+ -- Function: gcry_error_t gcry_prime_generate (gcry_mpi_t
+ *PRIME,unsigned int PRIME_BITS, unsigned int FACTOR_BITS,
+ gcry_mpi_t **FACTORS, gcry_prime_check_func_t CB_FUNC, void
+ *CB_ARG, gcry_random_level_t RANDOM_LEVEL, unsigned int FLAGS)
+
+ Generate a new prime number of PRIME_BITS bits and store it in
+ PRIME. If FACTOR_BITS is non-zero, one of the prime factors of
+ (PRIME - 1) / 2 must be FACTOR_BITS bits long. If FACTORS is
+ non-zero, allocate a new, 'NULL'-terminated array holding the prime
+ factors and store it in FACTORS. FLAGS might be used to influence
+ the prime number generation process.
+
+ -- Function: gcry_error_t gcry_prime_group_generator (gcry_mpi_t *R_G,
+ gcry_mpi_t PRIME, gcry_mpi_t *FACTORS, gcry_mpi_t START_G)
+
+ Find a generator for PRIME where the factorization of (PRIME - 1)
+ is in the 'NULL' terminated array FACTORS. Return the generator as
+ a newly allocated MPI in R_G. If START_G is not 'NULL', use this
+ as the start for the search.
+
+ -- Function: void gcry_prime_release_factors (gcry_mpi_t *FACTORS)
+
+ Convenience function to release the FACTORS array.
+
+\1f
+File: gcrypt.info, Node: Checking, Prev: Generation, Up: Prime numbers
+
+13.2 Checking
+=============
+
+ -- Function: gcry_error_t gcry_prime_check (gcry_mpi_t P, unsigned int
+ FLAGS)
+
+ Check whether the number P is prime. Returns zero in case P is
+ indeed a prime, returns 'GPG_ERR_NO_PRIME' in case P is not a prime
+ and a different error code in case something went horribly wrong.
+
+\1f
+File: gcrypt.info, Node: Utilities, Next: Tools, Prev: Prime numbers, Up: Top
+
+14 Utilities
+************
+
+* Menu:
+
+* Memory allocation:: Functions related to memory allocation.
+* Context management:: Functions related to context management.
+* Buffer description:: A data type to describe buffers.
+* Config reporting:: How to check Libgcrypt's configuration.
+
+\1f
+File: gcrypt.info, Node: Memory allocation, Next: Context management, Up: Utilities
+
+14.1 Memory allocation
+======================
+
+ -- Function: void * gcry_malloc (size_t N)
+
+ This function tries to allocate N bytes of memory. On success it
+ returns a pointer to the memory area, in an out-of-core condition,
+ it returns 'NULL'.
+
+ -- Function: void * gcry_malloc_secure (size_t N)
+ Like 'gcry_malloc', but uses secure memory.
+
+ -- Function: void * gcry_calloc (size_t N, size_t M)
+
+ This function allocates a cleared block of memory (i.e.
+ initialized with zero bytes) long enough to contain a vector of N
+ elements, each of size M bytes. On success it returns a pointer to
+ the memory block; in an out-of-core condition, it returns 'NULL'.
+
+ -- Function: void * gcry_calloc_secure (size_t N, size_t M)
+ Like 'gcry_calloc', but uses secure memory.
+
+ -- Function: void * gcry_realloc (void *P, size_t N)
+
+ This function tries to resize the memory area pointed to by P to N
+ bytes. On success it returns a pointer to the new memory area, in
+ an out-of-core condition, it returns 'NULL'. Depending on whether
+ the memory pointed to by P is secure memory or not, 'gcry_realloc'
+ tries to use secure memory as well.
+
+ -- Function: void gcry_free (void *P)
+ Release the memory area pointed to by P.
+
+\1f
+File: gcrypt.info, Node: Context management, Next: Buffer description, Prev: Memory allocation, Up: Utilities
+
+14.2 Context management
+=======================
+
+Some function make use of a context object. As of now, there are only a
+few math functions. However, future versions of Libgcrypt may make more
+use of this context object.
+
+ -- Data type: gcry_ctx_t
+ This type is used to refer to the general purpose context object.
+
+ -- Function: void gcry_ctx_release (gcry_ctx_t CTX)
+ Release the context object CTX and all associated resources. A
+ 'NULL' passed as CTX is ignored.
+
+\1f
+File: gcrypt.info, Node: Buffer description, Next: Config reporting, Prev: Context management, Up: Utilities
+
+14.3 Buffer description
+=======================
+
+To help hashing non-contiguous areas of memory, a general purpose data
+type is defined:
+
+ -- Data type: gcry_buffer_t
+ This type is a structure to describe a buffer. The user should
+ make sure that this structure is initialized to zero. The
+ available fields of this structure are:
+
+ '.size'
+ This is either 0 for no information available or indicates the
+ allocated length of the buffer.
+ '.off'
+ This is the offset into the buffer.
+ '.len'
+ This is the valid length of the buffer starting at '.off'.
+ '.data'
+ This is the address of the buffer.
+
+\1f
+File: gcrypt.info, Node: Config reporting, Prev: Buffer description, Up: Utilities
+
+14.4 How to check Libgcrypt's configuration.
+============================================
+
+Although 'GCRYCTL_PRINT_CONFIG' can be used to print configuration
+options, it is sometimes necessary to check them in a program. This can
+be accomplished by using this function:
+
+ -- Function: char * gcry_get_config (int MODE, const char *WHAT)
+
+ This function returns a malloced string with colon delimited
+ configure options. With a value of 0 for MODE this string
+ resembles the output of 'GCRYCTL_PRINT_CONFIG'. However, if WHAT
+ is not 'NULL', only the line where the first field (e.g.
+ "cpu-arch") matches WHAT is returned.
+
+ Other values than 0 for MODE are not defined. The caller shall
+ free the string using 'gcry_free'. On error 'NULL' is returned and
+ 'ERRNO' is set; if a value for WHAT is unknown, 'ERRNO' will be set
+ to 0.
+
+\1f
+File: gcrypt.info, Node: Tools, Next: Configuration, Prev: Utilities, Up: Top
+
+15 Tools
+********
+
+* Menu:
+
+* hmac256:: A standalone HMAC-SHA-256 implementation
+
+\1f
+File: gcrypt.info, Node: hmac256, Up: Tools
+
+15.1 A HMAC-SHA-256 tool
+========================
+
+This is a standalone HMAC-SHA-256 implementation used to compute an
+HMAC-SHA-256 message authentication code. The tool has originally been
+developed as a second implementation for Libgcrypt to allow comparing
+against the primary implementation and to be used for internal
+consistency checks. It should not be used for sensitive data because no
+mechanisms to clear the stack etc are used.
+
+ The code has been written in a highly portable manner and requires
+only a few standard definitions to be provided in a config.h file.
+
+'hmac256' is commonly invoked as
+
+ hmac256 "This is my key" foo.txt
+
+This compute the MAC on the file 'foo.txt' using the key given on the
+command line.
+
+'hmac256' understands these options:
+
+'--binary'
+ Print the MAC as a binary string. The default is to print the MAC
+ encoded as lower case hex digits.
+
+'--version'
+ Print version of the program and exit.
+
+\1f
+File: gcrypt.info, Node: Configuration, Next: Architecture, Prev: Tools, Up: Top
+
+16 Configuration files and environment variables
+************************************************
+
+This chapter describes which files and environment variables can be used
+to change the behaviour of Libgcrypt.
+
+The environment variables considered by Libgcrypt are:
+
+'LIBGCRYPT_FORCE_FIPS_MODE'
+ By setting this variable to any value, Libgcrypt is put into FIPS
+ mode at initialization time (*note enabling fips mode::).
+
+'GCRYPT_BARRETT'
+ By setting this variable to any value a different algorithm for
+ modular reduction is used for ECC.
+
+'GCRYPT_RNDUNIX_DBG'
+'GCRYPT_RNDUNIX_DBGALL'
+ These two environment variables are used to enable debug output for
+ the rndunix entropy gatherer, which is used on systems lacking a
+ /dev/random device. The value of 'GCRYPT_RNDUNIX_DBG' is a file
+ name or '-' for stdout. Debug output is the written to this file.
+ Setting 'GCRYPT_RNDUNIX_DBGALL' to any value will make the debug
+ output more verbose.
+
+'GCRYPT_RNDW32_NOPERF'
+ Setting this environment variable on Windows to any value disables
+ the use of performance data ('HKEY_PERFORMANCE_DATA') as source for
+ entropy. On some older Windows systems this could help to speed up
+ the creation of random numbers but also decreases the amount of
+ data used to init the random number generator.
+
+'GCRYPT_RNDW32_DBG'
+ Setting the value of this variable to a positive integer logs
+ information about the Windows entropy gatherer using the standard
+ log interface.
+
+'HOME'
+ This is used to locate the socket to connect to the EGD random
+ daemon. The EGD can be used on system without a /dev/random to
+ speed up the random number generator. It is not needed on the
+ majority of today's operating systems, and support for EGD requires
+ the use of a configure option at build time.
+
+The files which Libgcrypt uses to retrieve system information and the
+files which can be created by the user to modify Libgcrypt's behavior
+are:
+
+'/etc/gcrypt/hwf.deny'
+ This file can be used to disable the use of hardware based
+ optimizations, *note hardware features::.
+
+'/etc/gcrypt/random.conf'
+ This file can be used to globally change parameters of the random
+ generator. The file is a simple text file where empty lines and
+ lines with the first non white-space character being '#' are
+ ignored. Supported options are
+
+ 'disable-jent'
+ Disable the use of the jitter based entropy generator.
+
+ 'only-urandom'
+ Always use the non-blocking /dev/urandom or the respective
+ system call instead of the blocking /dev/random. If Libgcrypt
+ is used early in the boot process of the system, this option
+ should only be used if the system also supports the getrandom
+ system call.
+
+'/etc/gcrypt/fips_enabled'
+'/proc/sys/crypto/fips_enabled'
+ On Linux these files are used to enable FIPS mode, *note enabling
+ fips mode::.
+
+'/proc/cpuinfo'
+'/proc/self/auxv'
+ On Linux running on the ARM architecture, these files are used to
+ read hardware capabilities of the CPU.
+
+\1f
+File: gcrypt.info, Node: Architecture, Next: Self-Tests, Prev: Configuration, Up: Top
+
+17 Architecture
+***************
+
+This chapter describes the internal architecture of Libgcrypt.
+
+ Libgcrypt is a function library written in ISO C-90. Any compliant
+compiler should be able to build Libgcrypt as long as the target is
+either a POSIX platform or compatible to the API used by Windows NT.
+Provisions have been taken so that the library can be directly used from
+C++ applications; however building with a C++ compiler is not supported.
+
+ Building Libgcrypt is done by using the common './configure && make'
+approach. The configure command is included in the source distribution,
+and as a portable shell script it works on any Unix-alike system. The
+result of running the configure script are a C header file ('config.h'),
+customized Makefiles, the setup of symbolic links and a few other
+things. After that the make tool builds and optionally installs the
+library and the documentation. See the files 'INSTALL' and 'README' in
+the source distribution on how to do this.
+
+ Libgcrypt is developed using a Subversion(1) repository. Although
+all released versions are tagged in this repository, they should not be
+used to build production versions of Libgcrypt. Instead released
+tarballs should be used. These tarballs are available from several
+places with the master copy at 'ftp://ftp.gnupg.org/gcrypt/libgcrypt/'.
+Announcements of new releases are posted to the
+'gnupg-announce@gnupg.org' mailing list(2).
+
+
+ \0\b[image src="libgcrypt-modules.png" alt="Libgcrypt subsystems"\0\b]
+
+Figure 17.1: Libgcrypt subsystems
+
+ Libgcrypt consists of several subsystems (*note Figure 17.1:
+fig:subsystems.) and all these subsystems provide a public API; this
+includes the helper subsystems like the one for S-expressions. The API
+style depends on the subsystem; in general an open-use-close approach is
+implemented. The open returns a handle to a context used for all
+further operations on this handle, several functions may then be used on
+this handle, and a final close function releases all resources
+associated with the handle.
+
+* Menu:
+
+* Public-Key Subsystem Architecture:: About public keys.
+* Symmetric Encryption Subsystem Architecture:: About standard ciphers.
+* Hashing and MACing Subsystem Architecture:: About hashing.
+* Multi-Precision-Integer Subsystem Architecture:: About big integers.
+* Prime-Number-Generator Subsystem Architecture:: About prime numbers.
+* Random-Number Subsystem Architecture:: About random stuff.
+
+ ---------- Footnotes ----------
+
+ (1) A version control system available for many platforms
+
+ (2) See <http://www.gnupg.org/documentation/mailing-lists.en.html>
+for details.
+
+\1f
+File: gcrypt.info, Node: Public-Key Subsystem Architecture, Next: Symmetric Encryption Subsystem Architecture, Up: Architecture
+
+17.1 Public-Key Architecture
+============================
+
+Because public key cryptography is almost always used to process small
+amounts of data (hash values or session keys), the interface is not
+implemented using the open-use-close paradigm, but with single
+self-contained functions. Due to the wide variety of parameters
+required by different algorithms, S-expressions - as flexible way to
+convey these parameters - are used. There is a set of helper functions
+to work with these S-expressions.
+
+ Aside from functions to register new algorithms, map algorithms names
+to algorithms identifiers and to lookup properties of a key, the
+following main functions are available:
+
+'gcry_pk_encrypt'
+ Encrypt data using a public key.
+
+'gcry_pk_decrypt'
+ Decrypt data using a private key.
+
+'gcry_pk_sign'
+ Sign data using a private key.
+
+'gcry_pk_verify'
+ Verify that a signature matches the data.
+
+'gcry_pk_testkey'
+ Perform a consistency over a public or private key.
+
+'gcry_pk_genkey'
+ Create a new public/private key pair.
+
+ All these functions lookup the module implementing the algorithm and
+pass the actual work to that module. The parsing of the S-expression
+input and the construction of S-expression for the return values is done
+by the high level code ('cipher/pubkey.c'). Thus the internal interface
+between the algorithm modules and the high level functions passes data
+in a custom format.
+
+ By default Libgcrypt uses a blinding technique for RSA decryption to
+mitigate real world timing attacks over a network: Instead of using the
+RSA decryption directly, a blinded value y = x r^{e} \bmod n is
+decrypted and the unblinded value x' = y' r^{-1} \bmod n returned. The
+blinding value r is a random value with the size of the modulus n and
+generated with 'GCRY_WEAK_RANDOM' random level.
+
+ The algorithm used for RSA and DSA key generation depends on whether
+Libgcrypt is operating in standard or in FIPS mode. In standard mode an
+algorithm based on the Lim-Lee prime number generator is used. In FIPS
+mode RSA keys are generated as specified in ANSI X9.31 (1998) and DSA
+keys as specified in FIPS 186-2.
+
+\1f
+File: gcrypt.info, Node: Symmetric Encryption Subsystem Architecture, Next: Hashing and MACing Subsystem Architecture, Prev: Public-Key Subsystem Architecture, Up: Architecture
+
+17.2 Symmetric Encryption Subsystem Architecture
+================================================
+
+The interface to work with symmetric encryption algorithms is made up of
+functions from the 'gcry_cipher_' name space. The implementation
+follows the open-use-close paradigm and uses registered algorithm
+modules for the actual work. Unless a module implements optimized
+cipher mode implementations, the high level code ('cipher/cipher.c')
+implements the modes and calls the core algorithm functions to process
+each block.
+
+ The most important functions are:
+
+'gcry_cipher_open'
+ Create a new instance to encrypt or decrypt using a specified
+ algorithm and mode.
+
+'gcry_cipher_close'
+ Release an instance.
+
+'gcry_cipher_setkey'
+ Set a key to be used for encryption or decryption.
+
+'gcry_cipher_setiv'
+ Set an initialization vector to be used for encryption or
+ decryption.
+
+'gcry_cipher_encrypt'
+'gcry_cipher_decrypt'
+ Encrypt or decrypt data. These functions may be called with
+ arbitrary amounts of data and as often as needed to encrypt or
+ decrypt all data.
+
+ There is no strict alignment requirements for data, but the best
+ performance can be archived if data is aligned to cacheline
+ boundary.
+
+ There are also functions to query properties of algorithms or
+context, like block length, key length, map names or to enable features
+like padding methods.
+
+\1f
+File: gcrypt.info, Node: Hashing and MACing Subsystem Architecture, Next: Multi-Precision-Integer Subsystem Architecture, Prev: Symmetric Encryption Subsystem Architecture, Up: Architecture
+
+17.3 Hashing and MACing Subsystem Architecture
+==============================================
+
+The interface to work with message digests and CRC algorithms is made up
+of functions from the 'gcry_md_' name space. The implementation follows
+the open-use-close paradigm and uses registered algorithm modules for
+the actual work. Although CRC algorithms are not considered
+cryptographic hash algorithms, they share enough properties so that it
+makes sense to handle them in the same way. It is possible to use
+several algorithms at once with one context and thus compute them all on
+the same data.
+
+ The most important functions are:
+
+'gcry_md_open'
+ Create a new message digest instance and optionally enable one
+ algorithm. A flag may be used to turn the message digest algorithm
+ into a HMAC algorithm.
+
+'gcry_md_enable'
+ Enable an additional algorithm for the instance.
+
+'gcry_md_setkey'
+ Set the key for the MAC.
+
+'gcry_md_write'
+ Pass more data for computing the message digest to an instance.
+
+ There is no strict alignment requirements for data, but the best
+ performance can be archived if data is aligned to cacheline
+ boundary.
+
+'gcry_md_putc'
+ Buffered version of 'gcry_md_write' implemented as a macro.
+
+'gcry_md_read'
+ Finalize the computation of the message digest or HMAC and return
+ the result.
+
+'gcry_md_close'
+ Release an instance
+
+'gcry_md_hash_buffer'
+ Convenience function to directly compute a message digest over a
+ memory buffer without the need to create an instance first.
+
+ There are also functions to query properties of algorithms or the
+instance, like enabled algorithms, digest length, map algorithm names.
+It is also possible to reset an instance or to copy the current state of
+an instance at any time. Debug functions to write the hashed data to
+files are available as well.
+
+\1f
+File: gcrypt.info, Node: Multi-Precision-Integer Subsystem Architecture, Next: Prime-Number-Generator Subsystem Architecture, Prev: Hashing and MACing Subsystem Architecture, Up: Architecture
+
+17.4 Multi-Precision-Integer Subsystem Architecture
+===================================================
+
+The implementation of Libgcrypt's big integer computation code is based
+on an old release of GNU Multi-Precision Library (GMP). The decision not
+to use the GMP library directly was due to stalled development at that
+time and due to security requirements which could not be provided by the
+code in GMP. As GMP does, Libgcrypt provides high performance assembler
+implementations of low level code for several CPUS to gain much better
+performance than with a generic C implementation.
+
+Major features of Libgcrypt's multi-precision-integer code compared to
+GMP are:
+
+ * Avoidance of stack based allocations to allow protection against
+ swapping out of sensitive data and for easy zeroing of sensitive
+ intermediate results.
+
+ * Optional use of secure memory and tracking of its use so that
+ results are also put into secure memory.
+
+ * MPIs are identified by a handle (implemented as a pointer) to give
+ better control over allocations and to augment them with extra
+ properties like opaque data.
+
+ * Removal of unnecessary code to reduce complexity.
+
+ * Functions specialized for public key cryptography.
+
+\1f
+File: gcrypt.info, Node: Prime-Number-Generator Subsystem Architecture, Next: Random-Number Subsystem Architecture, Prev: Multi-Precision-Integer Subsystem Architecture, Up: Architecture
+
+17.5 Prime-Number-Generator Subsystem Architecture
+==================================================
+
+Libgcrypt provides an interface to its prime number generator. These
+functions make use of the internal prime number generator which is
+required for the generation for public key pairs. The plain prime
+checking function is exported as well.
+
+ The generation of random prime numbers is based on the Lim and Lee
+algorithm to create practically safe primes.(1) This algorithm creates
+a pool of smaller primes, select a few of them to create candidate
+primes of the form 2 * p_0 * p_1 * ... * p_n + 1, tests the candidate
+for primality and permutates the pool until a prime has been found. It
+is possible to clamp one of the small primes to a certain size to help
+DSA style algorithms. Because most of the small primes in the pool are
+not used for the resulting prime number, they are saved for later use
+(see 'save_pool_prime' and 'get_pool_prime' in 'cipher/primegen.c').
+The prime generator optionally supports the finding of an appropriate
+generator.
+
+The primality test works in three steps:
+
+ 1. The standard sieve algorithm using the primes up to 4999 is used as
+ a quick first check.
+
+ 2. A Fermat test filters out almost all non-primes.
+
+ 3. A 5 round Rabin-Miller test is finally used. The first round uses
+ a witness of 2, whereas the next rounds use a random witness.
+
+ To support the generation of RSA and DSA keys in FIPS mode according
+to X9.31 and FIPS 186-2, Libgcrypt implements two additional prime
+generation functions: '_gcry_derive_x931_prime' and
+'_gcry_generate_fips186_2_prime'. These functions are internal and not
+available through the public API.
+
+ ---------- Footnotes ----------
+
+ (1) Chae Hoon Lim and Pil Joong Lee. A key recovery attack on
+discrete log-based schemes using a prime order subgroup. In Burton S.
+Kaliski Jr., editor, Advances in Cryptology: Crypto '97, pages 249-263,
+Berlin / Heidelberg / New York, 1997. Springer-Verlag. Described on
+page 260.
+
+\1f
+File: gcrypt.info, Node: Random-Number Subsystem Architecture, Prev: Prime-Number-Generator Subsystem Architecture, Up: Architecture
+
+17.6 Random-Number Subsystem Architecture
+=========================================
+
+Libgcrypt provides 3 levels or random quality: The level
+'GCRY_VERY_STRONG_RANDOM' usually used for key generation, the level
+'GCRY_STRONG_RANDOM' for all other strong random requirements and the
+function 'gcry_create_nonce' which is used for weaker usages like
+nonces. There is also a level 'GCRY_WEAK_RANDOM' which in general maps
+to 'GCRY_STRONG_RANDOM' except when used with the function
+'gcry_mpi_randomize', where it randomizes a multi-precision integer
+using the 'gcry_create_nonce' function.
+
+There are three distinct random generators available:
+
+ * The Continuously Seeded Pseudo Random Number Generator (CSPRNG),
+ which is based on the classic GnuPG derived big pool
+ implementation. Implemented in 'random/random-csprng.c' and used
+ by default.
+ * The Deterministic Random Bits Generator (DRBG), based on the
+ specification by NIST SP800-90A. Implemented in
+ 'random/random-drbg.c' and used if Libgcrypt is in FIPS mode, or
+ Libgcrypt is configured by GCRYCTL_SET_PREFERRED_RNG_TYPE with
+ GCRY_RNG_TYPE_FIPS.
+ * Direct access to native RNG on the system. Implemented in
+ 'random/random-system.c' and used if Libgcrypt is configured by
+ GCRYCTL_SET_PREFERRED_RNG_TYPE with GCRY_RNG_TYPE_SYSTEM.
+
+All generators make use of so-called entropy gathering modules:
+
+rndgetentropy
+ Uses the operating system provided 'getentropy' function.
+
+rndoldlinux
+ Uses the operating system provided '/dev/random' and '/dev/urandom'
+ devices. The '/dev/gcrypt/random.conf' config option
+ 'only-urandom' can be used to inhibit the use of the blocking
+ '/dev/random' device.
+
+rndunix
+ Runs several operating system commands to collect entropy from
+ sources like virtual machine and process statistics. It is a kind
+ of poor-man's '/dev/random' implementation. It is not available in
+ FIPS mode.
+
+rndegd
+ Uses the operating system provided Entropy Gathering Daemon (EGD).
+ The EGD basically uses the same algorithms as rndunix does.
+ However as a system daemon it keeps on running and thus can serve
+ several processes requiring entropy input and does not waste
+ collected entropy if the application does not need all the
+ collected entropy.
+
+rndw32
+ Targeted for the Microsoft Windows OS. It uses certain properties
+ of that system and is the only gathering module available for that
+ OS.
+
+rndhw
+ Extra module to collect additional entropy by utilizing a hardware
+ random number generator. As of now the supported hardware RNG is
+ the Padlock engine of VIA (Centaur) CPUs and x86 CPUs with the
+ RDRAND instruction.
+
+rndjent
+ Extra module to collect additional entropy using a CPU jitter based
+ approach. The '/dev/gcrypt/random.conf' config option
+ 'disable-jent' can be used to inhibit the use of this module.
+
+* Menu:
+
+* CSPRNG Description:: Description of the CSPRNG.
+* DRBG Description:: Description of the DRBG.
+
+\1f
+File: gcrypt.info, Node: CSPRNG Description, Next: DRBG Description, Up: Random-Number Subsystem Architecture
+
+17.6.1 Description of the CSPRNG
+--------------------------------
+
+This random number generator is loosely modelled after the one described
+in Peter Gutmann's paper "Software Generation of Practically Strong
+Random Numbers".(1)
+
+ A pool of 600 bytes is used and mixed using the core SHA-1 hash
+transform function. Several extra features are used to make it robust
+against a wide variety of attacks and to protect against failures of
+subsystems. The state of the generator may be saved to a file and
+initially seeded form a file.
+
+ Depending on how Libgcrypt was build, the generator is able to select
+the best working entropy gathering module. It makes use of the slow and
+fast collection methods and requires the pool to be initially seeded
+form the slow gatherer or a seed file. An entropy estimation is used to
+mix in enough data from the gather modules before returning the actual
+random output. Process fork detection and protection is implemented.
+
+ The implementation of the nonce generator (for 'gcry_create_nonce')
+is a straightforward repeated hash design: A 28 byte buffer is initially
+seeded with the PID and the time in seconds in the first 20 bytes and
+with 8 bytes of random taken from the 'GCRY_STRONG_RANDOM' generator.
+Random numbers are then created by hashing all the 28 bytes with SHA-1
+and saving that again in the first 20 bytes. The hash is also returned
+as result.
+
+ ---------- Footnotes ----------
+
+ (1) Also described in chapter 6 of his book "Cryptographic Security
+Architecture", New York, 2004, ISBN 0-387-95387-6.
+
+\1f
+File: gcrypt.info, Node: DRBG Description, Prev: CSPRNG Description, Up: Random-Number Subsystem Architecture
+
+17.6.2 Description of the DRBG
+------------------------------
+
+The core of this deterministic random number generator is implemented
+according to the document "NIST Recommended DRBG Based on ANSI NIST
+SP800-90A". By default, this implementation uses the
+DRBG_NOPR_HMACSHA256 variant (HMAC DRBG with DF with SHA256, without
+prediction resistance.
+
+ The generator is based on contexts to utilize the same core functions
+for all random levels as required by the high-level interface. All
+random generators return their data in 128 bit blocks. If the caller
+requests fewer bits, the extra bits are not used. The key for each
+generator is only set once at the first time a generator context is
+used. The seed value is set along with the key and again after 1000
+output blocks.
+
+ On Unix like systems the 'GCRY_VERY_STRONG_RANDOM' and
+'GCRY_STRONG_RANDOM' generators are keyed and seeded using the
+rndgetentropy or rndoldlinux module. With rndoldlinux module, these
+generators may block until the OS kernel has collected enough entropy.
+When used with Microsoft Windows, the rndw32 module is used instead.
+
+ The generator used for 'gcry_create_nonce' is keyed and seeded from
+the 'GCRY_STRONG_RANDOM' generator. Thus, with rndoldlinux module, it
+may also block if the 'GCRY_STRONG_RANDOM' generator has not yet been
+used before and thus gets initialized on the first use by
+'gcry_create_nonce'. This special treatment is justified by the weaker
+requirements for a nonce generator and to save precious kernel entropy
+for use by the "real" random generators.
+
+\1f
+File: gcrypt.info, Node: Self-Tests, Next: FIPS Mode, Prev: Architecture, Up: Top
+
+Appendix A Description of the Self-Tests
+****************************************
+
+In addition to the build time regression test suite, Libgcrypt
+implements self-tests to be performed at runtime. Which self-tests are
+actually used depends on the mode Libgcrypt is used in. In standard
+mode a limited set of self-tests is run at the time an algorithm is
+first used. Note that not all algorithms feature a self-test in
+standard mode. The 'GCRYCTL_SELFTEST' control command may be used to
+run all implemented self-tests at any time; this will even run more
+tests than those run in FIPS mode.
+
+ If any of the self-tests fails, the library immediately returns an
+error code to the caller. If Libgcrypt is in FIPS mode, the self-tests
+will be performed within the "Self-Test" state and any failure puts the
+library into the "Error" state.
+
+A.1 Power-Up Tests
+==================
+
+Power-up tests are only performed if Libgcrypt is in FIPS mode.
+
+A.1.1 Symmetric Cipher Algorithm Power-Up Tests
+-----------------------------------------------
+
+The following symmetric encryption algorithm tests are run during
+power-up:
+
+AES-128
+ A known answer tests is run using one test vector and one test key
+ with AES in ECB mode. ('cipher/rijndael.c:selftest_basic_128')
+
+AES-192
+ A known answer tests is run using one test vector and one test key
+ with AES in ECB mode. ('cipher/rijndael.c:selftest_basic_192')
+
+AES-256
+ A known answer tests is run using one test vector and one test key
+ with AES in ECB mode. ('cipher/rijndael.c:selftest_basic_256')
+
+A.1.2 Hash Algorithm Power-Up Tests
+-----------------------------------
+
+The following hash algorithm tests are run during power-up:
+
+SHA-1
+ A known answer test using the string '"abc"' is run.
+ ('cipher/sha1.c:selftests_sha1')
+SHA-224
+ A known answer test using the string '"abc"' is run.
+ ('cipher/sha256.c:selftests_sha224')
+SHA-256
+ A known answer test using the string '"abc"' is run.
+ ('cipher/sha256.c:selftests_sha256')
+SHA-384
+ A known answer test using the string '"abc"' is run.
+ ('cipher/sha512.c:selftests_sha384')
+SHA-512
+ A known answer test using the string '"abc"' is run.
+ ('cipher/sha512.c:selftests_sha512')
+
+A.1.3 MAC Algorithm Power-Up Tests
+----------------------------------
+
+The following MAC algorithm tests are run during power-up:
+
+HMAC SHA-1
+ A known answer test using 9 bytes of data and a 64 byte key is run.
+ ('cipher/mac-hmac.c:selftests_sha1')
+HMAC SHA-224
+ A known answer test using 28 bytes of data and a 4 byte key is run.
+ ('cipher/mac-hmac.c:selftests_sha224')
+HMAC SHA-256
+ A known answer test using 28 bytes of data and a 4 byte key is run.
+ ('cipher/mac-hmac.c:selftests_sha256')
+HMAC SHA-384
+ A known answer test using 28 bytes of data and a 4 byte key is run.
+ ('cipher/mac-hmac.c:selftests_sha384')
+HMAC SHA-512
+ A known answer test using 28 bytes of data and a 4 byte key is run.
+ ('cipher/mac-hmac.c:selftests_sha512')
+HMAC SHA3-224
+HMAC SHA3-256
+HMAC SHA3-384
+HMAC SHA3-512
+ A known answer test using 9 bytes of data and a 20 byte key is run.
+ ('cipher/mac-hmac.c:selftests_sha3')
+CMAC AES
+ A known answer test using 40 bytes of data and a 16 byte key is
+ run. ('cipher/mac-cmac.c:selftests_cmac_aes')
+
+A.1.4 Random Number Power-Up Test
+---------------------------------
+
+The DRNG is tested during power-up this way:
+
+ 1. Requesting one block of random using the public interface to check
+ general working and the duplicated block detection.
+ 2. 3 know answer tests using pre-defined keys, seed and initial DT
+ values. For each test 3 blocks of 16 bytes are requested and
+ compared to the expected result. The DT value is incremented for
+ each block.
+
+A.1.5 Public Key Algorithm Power-Up Tests
+-----------------------------------------
+
+The public key algorithms are tested during power-up:
+
+RSA
+ A pre-defined 2048 bit RSA key is used and these tests are run in
+ turn:
+ 1. Conversion of S-expression to internal format.
+ ('cipher/rsa.c:selftests_rsa')
+ 2. Private key consistency check. ('cipher/rsa.c:selftests_rsa')
+ 3. A pre-defined 20 byte value is signed with PKCS#1 padding for
+ SHA-256. The result is verified using the public key against
+ the original data and against modified data.
+ ('cipher/rsa.c:selftest_sign_2048')
+ 4. A predefined 66 byte value is encrypted and checked that it
+ matches reference encyrpted message. The encrypted result is
+ then decrypted and checked that it matches the original random
+ value. ('cipher/rsa.c:selftest_encr_2048')
+
+ECC
+ A pre-defined SEC P-256 ECDSA key is used and these tests are run
+ in turn:
+ 1. Conversion of S-expression to internal format.
+ ('cipher/ecc.c:selftests_ecdsa')
+ 2. Private key consistency check.
+ ('cipher/ecc.c:selftests_ecdsa')
+ 3. A pre-defined 32 byte value (SHA-256 digest) is signed. The
+ result is verified using the public key against the original
+ data and against modified data.
+ ('cipher/ecc.c:selftest_sign')
+
+A.1.6 Key derivation function Power-Up Tests
+--------------------------------------------
+
+The key derivation functions are tested during power-up:
+
+PBKDF2
+ A known answer tests with 8 byte password and 4 byte salt and SHA-1
+ is used. ('cipher/kdf.c:selftest_pbkdf2')
+
+A.1.7 Integrity Power-Up Tests
+------------------------------
+
+The integrity of the Libgcrypt is tested during power-up but only if
+checking has been enabled at build time. The check works by computing a
+HMAC SHA-256 checksum over the file used to load Libgcrypt into memory.
+That checksum is compared against a checksum stored inside of the same
+file as in the text in the .rodata1 section of the ELF file.
+
+A.2 Conditional Tests
+=====================
+
+The conditional tests are performed if a certain condition is met. This
+may occur at any time; the library does not necessary enter the
+"Self-Test" state to run these tests but will transit to the "Error"
+state if a test failed.
+
+A.2.1 Key-Pair Generation Tests
+-------------------------------
+
+After an asymmetric key-pair has been generated, Libgcrypt runs a
+pair-wise consistency tests on the generated key. On failure the
+generated key is not used, an error code is returned and, if in FIPS
+mode, the library is put into the "Error" state.
+
+RSA
+ The test uses a random number 64 bits less the size of the modulus
+ as plaintext and runs an encryption and decryption operation in
+ turn. The encrypted value is checked to not match the plaintext,
+ and the result of the decryption is checked to match the plaintext.
+
+ A new random number of the same size is generated, signed and
+ verified to test the correctness of the signing operation. As a
+ second signing test, the signature is modified by incrementing its
+ value and then verified with the expected result that the
+ verification fails. ('cipher/rsa.c:test_keys')
+
+A.2.2 Software Load Tests
+-------------------------
+
+No code is loaded at runtime.
+
+A.2.3 Manual Key Entry Tests
+----------------------------
+
+A manual key entry feature is not implemented in Libgcrypt.
+
+A.3 Application Requested Tests
+===============================
+
+The application may requests tests at any time by means of the
+'GCRYCTL_SELFTEST' control command. Note that using these tests is not
+FIPS conformant: Although Libgcrypt rejects all application requests for
+services while running self-tests, it does not ensure that no other
+operations of Libgcrypt are still being executed. Thus, in FIPS mode an
+application requesting self-tests needs to power-cycle Libgcrypt
+instead.
+
+ When self-tests are requested, Libgcrypt runs all the tests it does
+during power-up as well as a few extra checks as described below.
+
+A.3.1 Symmetric Cipher Algorithm Tests
+--------------------------------------
+
+The following symmetric encryption algorithm tests are run in addition
+to the power-up tests:
+
+AES-128
+ A known answer tests with test vectors taken from NIST SP800-38a
+ and using the high level functions is run for block modes CFB and
+ OFB.
+
+A.3.2 Hash Algorithm Tests
+--------------------------
+
+The following hash algorithm tests are run in addition to the power-up
+tests:
+
+SHA-1
+SHA-224
+SHA-256
+ 1. A known answer test using a 56 byte string is run.
+ 2. A known answer test using a string of one million letters "a"
+ is run.
+ ('cipher/sha1.c:selftests_sha1',
+ 'cipher/sha256.c:selftests_sha224',
+ 'cipher/sha256.c:selftests_sha256')
+SHA-384
+SHA-512
+ 1. A known answer test using a 112 byte string is run.
+ 2. A known answer test using a string of one million letters "a"
+ is run.
+ ('cipher/sha512.c:selftests_sha384',
+ 'cipher/sha512.c:selftests_sha512')
+
+A.3.3 MAC Algorithm Tests
+-------------------------
+
+The following MAC algorithm tests are run in addition to the power-up
+tests:
+
+HMAC SHA-1
+ 1. A known answer test using 9 bytes of data and a 20 byte key is
+ run.
+ 2. A known answer test using 9 bytes of data and a 100 byte key
+ is run.
+ 3. A known answer test using 9 bytes of data and a 49 byte key is
+ run.
+ ('cipher/mac-hmac.c:selftests_sha1')
+HMAC SHA-224
+HMAC SHA-256
+HMAC SHA-384
+HMAC SHA-512
+ 1. A known answer test using 9 bytes of data and a 20 byte key is
+ run.
+ 2. A known answer test using 50 bytes of data and a 20 byte key
+ is run.
+ 3. A known answer test using 50 bytes of data and a 26 byte key
+ is run.
+ 4. A known answer test using 54 bytes of data and a 131 byte key
+ is run.
+ 5. A known answer test using 152 bytes of data and a 131 byte key
+ is run.
+ ('cipher/mac-hmac.c:selftests_sha224',
+ 'cipher/mac-hmac.c:selftests_sha256',
+ 'cipher/mac-hmac.c:selftests_sha384',
+ 'cipher/mac-hmac.c:selftests_sha512')
+
+HMAC SHA3-224
+HMAC SHA3-256
+HMAC SHA3-384
+HMAC SHA3-512
+ 1. A known answer test using 28 byte of data and a 4 byte key is
+ run.
+ 2. A known answer test using 50 byte of data and a 20 byte key is
+ run.
+ 3. A known answer test using 50 byte of data and a 25 byte key is
+ run.
+ 4. A known answer test using 20 byte of data and a 20 byte key
+ with truncation is run.
+ 5. A known answer test using 54 byte of data and a 131 byte key
+ is run.
+ 6. A known answer test using 54 byte of data and a 147 byte key
+ is run.
+ 7. A known answer test using 152 byte of data and a 131 byte key
+ is run.
+ 8. A known answer test using 152 byte of data and a 147 byte key
+ is run.
+ ('cipher/mac-hmac.c:selftests_sha3',
+
+CMAC AES
+ 1. A known answer test using 0 byte of data and a 16 byte key is
+ run.
+ 2. A known answer test using 24 byte of data and a 16 byte key is
+ run.
+ 3. A known answer test using 64 byte of data and a 32 byte key is
+ run.
+ 4. A known answer test using 16 byte of data and a 16 byte key is
+ run.
+ 5. A known answer test using 64 byte of data and a 16 byte key is
+ run.
+ 6. A known answer test using 0 byte of data and a 24 byte key is
+ run.
+ 7. A known answer test using 64 byte of data and a 24 byte key is
+ run.
+ 8. A known answer test using 0 byte of data and a 32 byte key is
+ run.
+ 9. A known answer test using 16 byte of data and a 32 byte key is
+ run.
+ ('cipher/mac-cmac.c:selftests_cmac_aes',
+
+\1f
+File: gcrypt.info, Node: FIPS Mode, Next: Library Copying, Prev: Self-Tests, Up: Top
+
+Appendix B Description of the FIPS Mode
+***************************************
+
+This appendix gives detailed information pertaining to the FIPS mode.
+In particular, the changes to the standard mode and the finite state
+machine are described. The self-tests required in this mode are
+described in the appendix on self-tests.
+
+B.1 Restrictions in FIPS Mode
+=============================
+
+If Libgcrypt is used in FIPS mode, these restrictions are effective:
+
+ * The cryptographic algorithms are restricted to this list:
+
+ GCRY_CIPHER_AES128
+ AES 128 bit symmetric encryption.
+ GCRY_CIPHER_AES192
+ AES 192 bit symmetric encryption.
+ GCRY_CIPHER_AES256
+ AES 256 bit symmetric encryption.
+ GCRY_MD_SHA1
+ SHA-1 message digest.
+ GCRY_MD_SHA224
+ SHA-224 message digest.
+ GCRY_MD_SHA256
+ SHA-256 message digest.
+ GCRY_MD_SHA384
+ SHA-384 message digest.
+ GCRY_MD_SHA512
+ SHA-512 message digest.
+ GCRY_MD_SHA3_224
+ SHA3-224 message digest.
+ GCRY_MD_SHA3_256
+ SHA3-256 message digest.
+ GCRY_MD_SHA3_384
+ SHA3-384 message digest.
+ GCRY_MD_SHA3_512
+ SHA3-512 message digest.
+ GCRY_MD_SHA1,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA-1 message digest.
+ GCRY_MD_SHA224,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA-224 message digest.
+ GCRY_MD_SHA256,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA-256 message digest.
+ GCRY_MD_SHA384,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA-384 message digest.
+ GCRY_MD_SHA512,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA-512 message digest.
+ GCRY_MD_SHA3_224,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA3-224 message digest.
+ GCRY_MD_SHA3_256,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA3-256 message digest.
+ GCRY_MD_SHA3_384,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA3-384 message digest.
+ GCRY_MD_SHA3_512,GCRY_MD_FLAG_HMAC
+ HMAC using a SHA3-512 message digest.
+ GCRY_MAC_CMAC_AES
+ CMAC using a AES key.
+ GCRY_PK_RSA
+ RSA encryption and signing.
+ GCRY_PK_ECC
+ ECC encryption and signing.
+
+ Note that the CRC algorithms are not considered cryptographic
+ algorithms and thus are in addition available.
+
+ * RSA key generation refuses to create and use a key with a keysize
+ of less than 2048 bits.
+
+ * The 'transient-key' flag for RSA key generation is ignored.
+
+ * Support for the VIA Padlock engine is disabled.
+
+ * FIPS mode may only be used on systems with a /dev/random device or
+ with a getentropy syscall. Switching into FIPS mode on other
+ systems will fail at runtime.
+
+ * Saving and loading a random seed file is ignored.
+
+ * The DRBG style random number generator is used in place of the
+ large-pool-CSPRNG generator.
+
+ * The command 'GCRYCTL_ENABLE_QUICK_RANDOM' is ignored.
+
+ * Message digest debugging is disabled.
+
+ * All debug output related to cryptographic data is suppressed.
+
+ * On-the-fly self-tests are not performed, instead self-tests are run
+ before entering operational state.
+
+ * The function 'gcry_set_allocation_handler' may not be used. In
+ FIPS mode this function does not have any effect, because FIPS has
+ requirements for memory zeroization.
+
+ * The digest algorithm MD5 may not be used.
+
+ * The signatures using SHA-1 digest algorithm may not be used.
+
+ * In FIPS mode the command 'GCRYCTL_DISABLE_SECMEM' is ignored.
+
+ * A handler set by 'gcry_set_outofcore_handler' is ignored.
+
+ * A handler set by 'gcry_set_fatalerror_handler' is ignored.
+
+ Note that when we speak about disabling FIPS mode, it merely means
+that the function 'gcry_fips_mode_active' returns false; it does not
+mean that any non FIPS algorithms are allowed.
+
+B.2 FIPS Finite State Machine
+=============================
+
+The FIPS mode of Libgcrypt implements a finite state machine (FSM) using
+8 states (*note Table B.1: tbl:fips-states.) and checks at runtime that
+only valid transitions (*note Table B.2: tbl:fips-state-transitions.)
+may happen.
+
+
+ \0\b[image src="fips-fsm.png" alt="FIPS FSM Diagram"\0\b]
+
+Figure B.1: FIPS mode state diagram
+
+
+States used by the FIPS FSM:
+
+Power-Off
+ Libgcrypt is not runtime linked to another application. This
+ usually means that the library is not loaded into main memory.
+ This state is documentation only.
+
+Power-On
+ Libgcrypt is loaded into memory and API calls may be made.
+ Compiler introduced constructor functions may be run. Note that
+ Libgcrypt does not implement any arbitrary constructor functions to
+ be called by the operating system
+
+Init
+ The Libgcrypt initialization functions are performed and the
+ library has not yet run any self-test.
+
+Self-Test
+ Libgcrypt is performing self-tests.
+
+Operational
+ Libgcrypt is in the operational state and all interfaces may be
+ used.
+
+Error
+ Libgrypt is in the error state. When calling any FIPS relevant
+ interfaces they either return an error ('GPG_ERR_NOT_OPERATIONAL')
+ or put Libgcrypt into the Fatal-Error state and won't return.
+
+Fatal-Error
+ Libgcrypt is in a non-recoverable error state and will
+ automatically transit into the Shutdown state.
+
+Shutdown
+ Libgcrypt is about to be terminated and removed from the memory.
+ The application may at this point still run cleanup handlers.
+
+Table B.1: FIPS mode states
+
+
+The valid state transitions (*note Figure B.1: fig:fips-fsm.) are:
+'1'
+ Power-Off to Power-On is implicitly done by the OS loading
+ Libgcrypt as a shared library and having it linked to an
+ application.
+
+'2'
+ Power-On to Init is triggered by the application calling the
+ Libgcrypt initialization function 'gcry_check_version'.
+
+'3'
+ Init to Self-Test is either triggered by a dedicated API call or
+ implicit by invoking a Libgrypt service controlled by the FSM.
+
+'4'
+ Self-Test to Operational is triggered after all self-tests passed
+ successfully.
+
+'5'
+ Operational to Shutdown is an artificial state without any direct
+ action in Libgcrypt. When reaching the Shutdown state the library
+ is deinitialized and can't return to any other state again.
+
+'6'
+ Shutdown to Power-Off is the process of removing Libgcrypt from the
+ computer's memory. For obvious reasons the Power-Off state can't
+ be represented within Libgcrypt and thus this transition is for
+ documentation only.
+
+'7'
+ Operational to Error is triggered if Libgcrypt detected an
+ application error which can't be returned to the caller but still
+ allows Libgcrypt to properly run. In the Error state all FIPS
+ relevant interfaces return an error code.
+
+'8'
+ Error to Shutdown is similar to the Operational to Shutdown
+ transition (5).
+
+'9'
+ Error to Fatal-Error is triggered if Libgrypt detects an fatal
+ error while already being in Error state.
+
+'10'
+ Fatal-Error to Shutdown is automatically entered by Libgcrypt after
+ having reported the error.
+
+'11'
+ Power-On to Shutdown is an artificial state to document that
+ Libgcrypt has not yet been initialized but the process is about to
+ terminate.
+
+'12'
+ Power-On to Fatal-Error will be triggered if certain Libgcrypt
+ functions are used without having reached the Init state.
+
+'13'
+ Self-Test to Fatal-Error is triggered by severe errors in Libgcrypt
+ while running self-tests.
+
+'14'
+ Self-Test to Error is triggered by a failed self-test.
+
+'15'
+ Operational to Fatal-Error is triggered if Libcrypt encountered a
+ non-recoverable error.
+
+'16'
+ Operational to Self-Test is triggered if the application requested
+ to run the self-tests again.
+
+'17'
+ Error to Self-Test is triggered if the application has requested to
+ run self-tests to get back into operational state after an error.
+
+'18'
+ Init to Error is triggered by errors in the initialization code.
+
+'19'
+ Init to Fatal-Error is triggered by non-recoverable errors in the
+ initialization code.
+
+'20'
+ Error to Error is triggered by errors while already in the Error
+ state.
+
+Table B.2: FIPS mode state transitions
+
+B.3 FIPS Miscellaneous Information
+==================================
+
+Libgcrypt does not do any key management on itself; the application
+needs to care about it. Keys which are passed to Libgcrypt should be
+allocated in secure memory as available with the functions
+'gcry_malloc_secure' and 'gcry_calloc_secure'. By calling 'gcry_free'
+on this memory, the memory and thus the keys are overwritten with zero
+bytes before releasing the memory.
+
+ For use with the random number generator, Libgcrypt generates 3
+internal keys which are stored in the encryption contexts used by the
+RNG. These keys are stored in secure memory for the lifetime of the
+process. Application are required to use 'GCRYCTL_TERM_SECMEM' before
+process termination. This will zero out the entire secure memory and
+thus also the encryption contexts with these keys.
+
+\1f
+File: gcrypt.info, Node: Library Copying, Next: Copying, Prev: FIPS Mode, Up: Top
+
+GNU Lesser General Public License
+*********************************
+
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ [This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence the
+ version number 2.1.]
+
+Preamble
+========
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public Licenses are
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software--typically libraries--of the Free Software
+Foundation and other authors who decide to use it. You can use it too,
+but we suggest you first think carefully about whether this license or
+the ordinary General Public License is the better strategy to use in any
+particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of it
+in new free programs; and that you are informed that you can do these
+things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling it.
+And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that there
+is no warranty for the free library. Also, if the library is modified
+by someone else and passed on, the recipients should know that what they
+have is not the original version, so that the original author's
+reputation will not be affected by problems that might be introduced by
+others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that any
+patent license obtained for a version of the library must be consistent
+with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and is
+quite different from the ordinary General Public License. We use this
+license for certain libraries in order to permit linking those libraries
+into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the entire
+combination fits its criteria of freedom. The Lesser General Public
+License permits more lax criteria for linking other code with the
+library.
+
+ We call this license the "Lesser" General Public License because it
+does _Less_ to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less of
+an advantage over competing non-free programs. These disadvantages are
+the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free library
+does the same job as widely used non-free libraries. In this case,
+there is little to gain by limiting the free library to free software
+only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of free
+software. For example, permission to use the GNU C Library in non-free
+programs enables many more people to use the whole GNU operating system,
+as well as its variant, the GNU/Linux operating system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is linked
+with the Library has the freedom and the wherewithal to run that program
+using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+ program which contains a notice placed by the copyright holder or
+ other authorized party saying it may be distributed under the terms
+ of this Lesser General Public License (also called "this License").
+ Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+ prepared so as to be conveniently linked with application programs
+ (which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+ which has been distributed under these terms. A "work based on the
+ Library" means either the Library or any derivative work under
+ copyright law: that is to say, a work containing the Library or a
+ portion of it, either verbatim or with modifications and/or
+ translated straightforwardly into another language. (Hereinafter,
+ translation is included without limitation in the term
+ "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+ making modifications to it. For a library, complete source code
+ means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to
+ control compilation and installation of the library.
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running a program using the Library is not restricted, and
+ output from such a program is covered only if its contents
+ constitute a work based on the Library (independent of the use of
+ the Library in a tool for writing it). Whether that is true
+ depends on what the Library does and what the program that uses the
+ Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+ complete source code as you receive it, in any medium, provided
+ that you conspicuously and appropriately publish on each copy an
+ appropriate copyright notice and disclaimer of warranty; keep
+ intact all the notices that refer to this License and to the
+ absence of any warranty; and distribute a copy of this License
+ along with the Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 2. You may modify your copy or copies of the Library or any portion of
+ it, thus forming a work based on the Library, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a. The modified work must itself be a software library.
+
+ b. You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c. You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d. If a facility in the modified Library refers to a function or
+ a table of data to be supplied by an application program that
+ uses the facility, other than as an argument passed when the
+ facility is invoked, then you must make a good faith effort to
+ ensure that, in the event an application does not supply such
+ function or table, the facility still operates, and performs
+ whatever part of its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots
+ has a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function
+ must be optional: if the application does not supply it, the
+ square root function must still compute square roots.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Library, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not apply
+ to those sections when you distribute them as separate works. But
+ when you distribute the same sections as part of a whole which is a
+ work based on the Library, the distribution of the whole must be on
+ the terms of this License, whose permissions for other licensees
+ extend to the entire whole, and thus to each and every part
+ regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Library.
+
+ In addition, mere aggregation of another work not based on the
+ Library with the Library (or with a work based on the Library) on a
+ volume of a storage or distribution medium does not bring the other
+ work under the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+ License instead of this License to a given copy of the Library. To
+ do this, you must alter all the notices that refer to this License,
+ so that they refer to the ordinary GNU General Public License,
+ version 2, instead of to this License. (If a newer version than
+ version 2 of the ordinary GNU General Public License has appeared,
+ then you can specify that version instead if you wish.) Do not
+ make any other change in these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+ that copy, so the ordinary GNU General Public License applies to
+ all subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of the
+ Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or derivative
+ of it, under Section 2) in object code or executable form under the
+ terms of Sections 1 and 2 above provided that you accompany it with
+ the complete corresponding machine-readable source code, which must
+ be distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+ from a designated place, then offering equivalent access to copy
+ the source code from the same place satisfies the requirement to
+ distribute the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+ Library, but is designed to work with the Library by being compiled
+ or linked with it, is called a "work that uses the Library". Such
+ a work, in isolation, is not a derivative work of the Library, and
+ therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+ creates an executable that is a derivative of the Library (because
+ it contains portions of the Library), rather than a "work that uses
+ the library". The executable is therefore covered by this License.
+ Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header
+ file that is part of the Library, the object code for the work may
+ be a derivative work of the Library even though the source code is
+ not. Whether this is true is especially significant if the work
+ can be linked without the Library, or if the work is itself a
+ library. The threshold for this to be true is not precisely
+ defined by law.
+
+ If such an object file uses only numerical parameters, data
+ structure layouts and accessors, and small macros and small inline
+ functions (ten lines or less in length), then the use of the object
+ file is unrestricted, regardless of whether it is legally a
+ derivative work. (Executables containing this object code plus
+ portions of the Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+ distribute the object code for the work under the terms of Section
+ 6. Any executables containing that work also fall under Section 6,
+ whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or link
+ a "work that uses the Library" with the Library to produce a work
+ containing portions of the Library, and distribute that work under
+ terms of your choice, provided that the terms permit modification
+ of the work for the customer's own use and reverse engineering for
+ debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+ Library is used in it and that the Library and its use are covered
+ by this License. You must supply a copy of this License. If the
+ work during execution displays copyright notices, you must include
+ the copyright notice for the Library among them, as well as a
+ reference directing the user to the copy of this License. Also,
+ you must do one of these things:
+
+ a. Accompany the work with the complete corresponding
+ machine-readable source code for the Library including
+ whatever changes were used in the work (which must be
+ distributed under Sections 1 and 2 above); and, if the work is
+ an executable linked with the Library, with the complete
+ machine-readable "work that uses the Library", as object code
+ and/or source code, so that the user can modify the Library
+ and then relink to produce a modified executable containing
+ the modified Library. (It is understood that the user who
+ changes the contents of definitions files in the Library will
+ not necessarily be able to recompile the application to use
+ the modified definitions.)
+
+ b. Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run
+ time a copy of the library already present on the user's
+ computer system, rather than copying library functions into
+ the executable, and (2) will operate properly with a modified
+ version of the library, if the user installs one, as long as
+ the modified version is interface-compatible with the version
+ that the work was made with.
+
+ c. Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in
+ Subsection 6a, above, for a charge no more than the cost of
+ performing this distribution.
+
+ d. If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the
+ above specified materials from the same place.
+
+ e. Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+ Library" must include any data and utility programs needed for
+ reproducing the executable from it. However, as a special
+ exception, the materials to be distributed need not include
+ anything that is normally distributed (in either source or binary
+ form) with the major components (compiler, kernel, and so on) of
+ the operating system on which the executable runs, unless that
+ component itself accompanies the executable.
+
+ It may happen that this requirement contradicts the license
+ restrictions of other proprietary libraries that do not normally
+ accompany the operating system. Such a contradiction means you
+ cannot use both them and the Library together in an executable that
+ you distribute.
+
+ 7. You may place library facilities that are a work based on the
+ Library side-by-side in a single library together with other
+ library facilities not covered by this License, and distribute such
+ a combined library, provided that the separate distribution of the
+ work based on the Library and of the other library facilities is
+ otherwise permitted, and provided that you do these two things:
+
+ a. Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b. Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same
+ work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute the
+ Library except as expressly provided under this License. Any
+ attempt otherwise to copy, modify, sublicense, link with, or
+ distribute the Library is void, and will automatically terminate
+ your rights under this License. However, parties who have received
+ copies, or rights, from you under this License will not have their
+ licenses terminated so long as such parties remain in full
+ compliance.
+
+ 9. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Library or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Library (or any work
+ based on the Library), you indicate your acceptance of this License
+ to do so, and all its terms and conditions for copying,
+ distributing or modifying the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+ Library), the recipient automatically receives a license from the
+ original licensor to copy, distribute, link with or modify the
+ Library subject to these terms and conditions. You may not impose
+ any further restrictions on the recipients' exercise of the rights
+ granted herein. You are not responsible for enforcing compliance
+ by third parties with this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Library at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Library by all those who receive
+ copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely
+ from distribution of the Library.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply, and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Library under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+ versions of the Lesser General Public License from time to time.
+ Such new versions will be similar in spirit to the present version,
+ but may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Library specifies a version number of this License which applies to
+ it and "any later version", you have the option of following the
+ terms and conditions either of that version or of any later version
+ published by the Free Software Foundation. If the Library does not
+ specify a license version number, you may choose any version ever
+ published by the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+ programs whose distribution conditions are incompatible with these,
+ write to the author to ask for permission. For software which is
+ copyrighted by the Free Software Foundation, write to the Free
+ Software Foundation; we sometimes make exceptions for this. Our
+ decision will be guided by the two goals of preserving the free
+ status of all derivatives of our free software and of promoting the
+ sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
+ AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE
+ DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
+ OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Libraries
+==============================================
+
+If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of
+the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should have
+at least the "copyright" line and a pointer to where the full notice is
+found.
+
+ ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES.
+ Copyright (C) YEAR NAME OF AUTHOR
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or (at
+ your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
+ USA.
+
+ Also add information on how to contact you by electronic and paper
+mail.
+
+ You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the library
+ `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1990
+ Ty Coon, President of Vice
+
+ That's all there is to it!
+
+\1f
+File: gcrypt.info, Node: Copying, Next: Figures and Tables, Prev: Library Copying, Up: Top
+
+GNU General Public License
+**************************
+
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+========
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users. This General Public
+License applies to most of the Free Software Foundation's software and
+to any other program whose authors commit to using it. (Some other Free
+Software Foundation software is covered by the GNU Library General
+Public License instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it if
+you want it, that you can change the software or use pieces of it in new
+free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software,
+and (2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 1. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The "Program",
+ below, refers to any such program or work, and a "work based on the
+ Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or
+ translated into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 2. You may copy and distribute verbatim copies of the Program's source
+ code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any
+ warranty; and give any other recipients of the Program a copy of
+ this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 3. You may modify your copy or copies of the Program or any portion of
+ it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a. You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b. You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program or
+ any part thereof, to be licensed as a whole at no charge to
+ all third parties under the terms of this License.
+
+ c. If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display
+ an announcement including an appropriate copyright notice and
+ a notice that there is no warranty (or else, saying that you
+ provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to
+ view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an
+ announcement, your work based on the Program is not required
+ to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not apply
+ to those sections when you distribute them as separate works. But
+ when you distribute the same sections as part of a whole which is a
+ work based on the Program, the distribution of the whole must be on
+ the terms of this License, whose permissions for other licensees
+ extend to the entire whole, and thus to each and every part
+ regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on a
+ volume of a storage or distribution medium does not bring the other
+ work under the scope of this License.
+
+ 4. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+ a. Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Sections 1 and 2 above on a medium customarily used for
+ software interchange; or,
+
+ b. Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ c. Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either source
+ or binary form) with the major components (compiler, kernel, and so
+ on) of the operating system on which the executable runs, unless
+ that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 5. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.
+
+ 6. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this License
+ to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 7. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject
+ to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted
+ herein. You are not responsible for enforcing compliance by third
+ parties to this License.
+
+ 8. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who receive
+ copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely
+ from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 9. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 10. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies to
+ it and "any later version", you have the option of following the
+ terms and conditions either of that version or of any later version
+ published by the Free Software Foundation. If the Program does not
+ specify a version number of this License, you may choose any
+ version ever published by the Free Software Foundation.
+
+ 11. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by
+ the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision
+ will be guided by the two goals of preserving the free status of
+ all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+ NO WARRANTY
+
+ 12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
+ AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+ DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+ 13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+=============================================
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES.
+ Copyright (C) 19YY NAME OF AUTHOR
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+ Also add information on how to contact you by electronic and paper
+mail.
+
+ If the program is interactive, make it output a short notice like
+this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+ type `show w'. This is free software, and you are welcome
+ to redistribute it under certain conditions; type `show c'
+ for details.
+
+ The hypothetical commands 'show w' and 'show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than 'show w' and 'show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+ You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the program,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright
+ interest in the program `Gnomovision'
+ (which makes passes at compilers) written
+ by James Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1989
+ Ty Coon, President of Vice
+
+ This General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use the
+GNU Library General Public License instead of this License.
+
file search path (via the @option{-I} option).
However, the path to the include file is determined at the time the
-source is configured. To solve this problem, Libgcrypt ships with a small
-helper program @command{libgcrypt-config} that knows the path to the
-include file and other configuration options. The options that need
-to be added to the compiler invocation at compile time are output by
-the @option{--cflags} option to @command{libgcrypt-config}. The following
-example shows how it can be used at the command line:
+source is configured. To solve this problem, Libgcrypt ships with
+@code{libgcrypt.pc} file, that knows about the path to the include
+file and other configuration options. The options that need to be
+added to the compiler invocation at compile time are output by the
+@option{--cflags} option to @command{pkg-config libgcrypt}. The
+following example shows how it can be used at the command line:
@example
-gcc -c foo.c `libgcrypt-config --cflags`
+gcc -c foo.c `pkg-config --cflags libgcrypt`
@end example
-Adding the output of @samp{libgcrypt-config --cflags} to the
+Adding the output of @samp{pkg-config --cflags libgcrypt} to the
compiler's command line will ensure that the compiler can find the
Libgcrypt header file.
Again, the compiler has to find the library files. For this to work,
the path to the library files has to be added to the library search path
(via the @option{-L} option). For this, the option @option{--libs} to
-@command{libgcrypt-config} can be used. For convenience, this option
+@command{pkg-config libgcrypt} can be used. For convenience, this option
also outputs all other options that are required to link the program
with the Libgcrypt libraries (in particular, the @samp{-lgcrypt}
option). The example shows how to link @file{foo.o} with the Libgcrypt
library to a program @command{foo}.
@example
-gcc -o foo foo.o `libgcrypt-config --libs`
+gcc -o foo foo.o `pkg-config --libs libgcrypt`
@end example
Of course you can also combine both examples to a single command by
-specifying both options to @command{libgcrypt-config}:
+specifying both options to @command{pkg-config libgcrypt}:
@example
-gcc -o foo foo.c `libgcrypt-config --cflags --libs`
+gcc -o foo foo.c `pkg-config --cflags --libs libgcrypt`
@end example
@node Building sources using Automake
It is much easier if you use GNU Automake instead of writing your own
Makefiles. If you do that, you do not have to worry about finding and
-invoking the @command{libgcrypt-config} script at all.
-Libgcrypt provides an extension to Automake that does all
-the work for you.
+invoking the @command{pkg-config} script at all.
+
+You can use @code{PKG_CHECK_MODULES} macro, or, libgcrypt also
+provides an extension to Automake that does all the work for you.
@c A simple macro for optional variables.
@macro ovar{varname}
Additionally, the function defines @code{LIBGCRYPT_CFLAGS} to the
flags needed for compilation of the program to find the
@file{gcrypt.h} header file, and @code{LIBGCRYPT_LIBS} to the linker
-flags needed to link the program to the Libgcrypt library. If the
-used helper script does not match the target type you are building for,
-a warning is printed and the string @code{libgcrypt} is appended to the
-variable @code{gpg_config_script_warn}.
-
-This macro searches for @command{libgcrypt-config} along the PATH. If
-you are cross-compiling, it is useful to set the environment variable
-@code{SYSROOT} to the top directory of your target. The macro will
-then first look for the helper program in the @file{bin} directory
-below that top directory. An absolute directory name must be used for
-@code{SYSROOT}. Finally, if the configure command line option
-@code{--with-libgcrypt-prefix} is used, only its value is used for the top
-directory below which the helper script is expected.
+flags needed to link the program to the Libgcrypt library.
+This macro locates for @code{libgcrypt.pc}, with cross-compile support.
@end defmac
You can use the defined Autoconf variables like this in your
@code{GPG_ERR_NO_ERROR}. Otherwise @code{GPG_ERR_NOT_SUPPORTED}
is returned.
+@item GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION; Arguments: const char *
+
+Check if the given function is approved under the current FIPS 140-3
+certification. If the function is approved, this function returns
+@code{GPG_ERR_NO_ERROR} (other restrictions might still apply).
+Otherwise @code{GPG_ERR_NOT_SUPPORTED} is returned.
+
+@item GCRYCTL_FIPS_SERVICE_INDICATOR_MAC; Arguments: enum gcry_mac_algos
+
+Check if the given MAC is approved under the current FIPS 140-3
+certification. If the MAC is approved, this function returns
+@code{GPG_ERR_NO_ERROR}. Otherwise @code{GPG_ERR_NOT_SUPPORTED}
+is returned.
+
+@item GCRYCTL_FIPS_SERVICE_INDICATOR_MD; Arguments: enum gcry_md_algos
+
+Check if the given message digest algorithm is approved under the current
+FIPS 140-3 certification. If the algorithm is approved, this function returns
+@code{GPG_ERR_NO_ERROR}. Otherwise @code{GPG_ERR_NOT_SUPPORTED} is returned.
+
+@item GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS; Arguments: const char *
+
+Check if the given public key operation flag or s-expression object name is
+approved under the current FIPS 140-3 certification. If the flag is
+approved, this function returns @code{GPG_ERR_NO_ERROR}.
+
+Otherwise @code{GPG_ERR_NOT_SUPPORTED} is returned.
+
+For compound s-expression objects, if the object name is allowed, the user
+is responsible to check also the internal members. For example:
+
+@example
+ gcry_sexp_t s_sig = NULL;
+ gcry_md_hd_t hd = NULL;
+ gcry_sexp_t s_sk = NULL;
+ const char *data_tmpl = "(data(flags pss)(hash %s %b)(salt-length 1:0))";
+
+ if (err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION, "gcry_md_open") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_MD, GCRY_MD_SHA512) &&
+ err = gcry_md_open (&hd, GCRY_MD_SHA512, 0))
+ @{
+ printf ("gcry_md_open failed: %s", gpg_strerror (err));
+ return;
+ @}
+ gcry_md_write (hd, buffer, buflen);
+
+ /* initialize the key in s_sk */
+
+ if (err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION, "gcry_pk_hash_sign") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "data") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "flags") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "pss") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "hash") &&
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS, "salt-length")
+ err = gcry_pk_hash_sign (&s_sig, data_tmpl, s_sk, hd, NULL))
+ @{
+ printf ("gcry_pk_hash_sign failed: %s", gpg_strerror (err));
+ return;
+ @}
+ /* ok */
+@end example
+
@end table
@end deftypefun
(@code{src/global.c}) for details.
@end deftypefun
+@c begin constants for gcry_cipher_ctl
+@table @code
+
+@item GCRYCTL_SET_ALLOW_WEAK_KEY:
+
+This may be used to allow use of weak keys for certain block ciphers.
+@var{buffer} must be given as @code{NULL}. To allow weak keys for
+a cipher context @var{h}, set @var{buflen} to '1'. To disallow weak
+keys, set @var{buflen} to '0'.
+
+Default setting for a cipher context is to disallow weak keys.
+
+Note that even if weak keys are allowed, @code{gcry_cipher_setkey} will
+return error code @code{GPG_ERR_WEAK_KEY} if a weak key is detected.
+However, the cipher context is configured with the weak key and can
+proceed with encryption/decryption. When weak keys are disallowed,
+error code @code{GPG_ERR_WEAK_KEY} is returned and the cipher context
+is cannot be used for encryption/decryption.
+
+@end table
+@c end constants for gcry_cipher_info
+
@deftypefun gcry_error_t gcry_cipher_info (gcry_cipher_hd_t @var{h}, @
int @var{what}, void *@var{buffer}, size_t *@var{nbytes})
Force the use of the ANSI X9.31 key generation algorithm instead of
the default algorithm. This flag is only meaningful for RSA key
generation and usually not required. Note that this algorithm is
-implicitly used if either @code{derive-parms} is given or Libgcrypt is
-in FIPS mode.
+implicitly used if either @code{derive-parms} is given.
@item use-fips186
@cindex FIPS 186
allowed to use this together with a @code{domain} specification. If
given, it is used to derive the keys using the given parameters.
-If given for an RSA key, the X9.31 key generation algorithm is used
-even if libgcrypt is not in FIPS mode. If given for a DSA key, the
-FIPS 186 algorithm is used even if libgcrypt is not in FIPS mode.
+If given for an RSA key, the X9.31 key generation algorithm is used.
+If given for a DSA key, the FIPS 186 algorithm is used even if
+libgcrypt is not in FIPS mode.
@example
(genkey
(seed @var{seed-mpi}))))
@end example
+@item test-parms @var{list}
+This is currently only implemented for RSA keys. If given, the
+libgcrypt will not generate parameter, but tests whether the p,q is
+probably prime. Returns key with zeroes.
+
+The FIPS key generation algorithm is used even if libgcrypt is not
+in FIPS mode.
+
+@example
+(genkey
+ (rsa
+ (nbits 4:1024)
+ (rsa-use-e 1:3)
+ (test-parms
+ (e 5:65537)
+ (p #00bbccabcee15d343944a47e492d4b1f4de79633e2
+ 0cbb46f7d2d6813392a807ad048cf77528edd19f77
+ e7453f25173b9dcb70423afa2037aae147b81a33d5
+ 41fc58f875eff1e852ab55e2e09a3debfbc151b3b0
+ d17fef6f74d81fca14fbae531418e211ef818592af
+ 70de5cec3b92795cc3578572bf456099cd8727150e
+ 523261#)
+ (q #00ca87ecf2883f4ed00a9ec65abdeba81d28edbfcc
+ 34ecc563d587f166b52d42bfbe22bbc095b0b8426a
+ 2f8bbc55baaa8859b42cbc376ed3067db3ef7b135b
+ 63481322911ebbd7014db83aa051e0ca2dbf302b75
+ cd37f2ae8df90e134226e92f6353a284b28bb30af0
+ bbf925b345b955328379866ebac11d55bc80fe84f1
+ 05d415#)
+
+@end example
+
@item flags @var{flaglist}
This is preferred way to define flags. @var{flaglist} may contain any
@noindent
Note that all of the above formats store the integer in big-endian
-format (MSB first).
+format (MSB first). Leading zeroes are stripped unless they are
+required to keep a value positive.
@end deftypefun
--- /dev/null
+@set UPDATED 19 October 2023
+@set UPDATED-MONTH October 2023
+@set EDITION 1.10.3
+@set VERSION 1.10.3
--- /dev/null
+@set UPDATED 19 October 2023
+@set UPDATED-MONTH October 2023
+@set EDITION 1.10.3
+@set VERSION 1.10.3
+++ /dev/null
-%%comments:
-<p>
-The copyright licensing notice below applies to this text. The software
-described in this text has its own copyright notice and license, which can
-usually be found in the distribution itself.
-</p>
-<p>
-Copyright © 2000, 2001, 2002 Free Software Foundation, Inc.
-</p>
-<p>
-Permission is granted to copy, distribute, and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or any
-later version published by the Free Software Foundation; with no Invariant
-Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy
-of this license is included in the file <a href="COPYING.DOC">COPYING.DOC</a>.
-</p>
-
-%%name: Libgcrypt
-
-%%short-description: Cryptographic library
-
-%%full-description: This is a general purpose cryptographic library
-based on the code from GnuPG. It provides functions for all
-cryptograhic building blocks: symmetric ciphers
-(AES,DES,Blowfish,CAST5,Twofish,Arcfour), hash algorithms (MD4, MD5,
-RIPE-MD160, SHA-1, SHA-256, TIGER-192), MACs (HMAC for all hash algorithms),
-public key algorithms (RSA, ElGamal, DSA), large integer functions,
-random numbers and a lot of supporting functions.
-
-%%category: sec, libs
-
-%%license: LGPL
-
-%%license-verified-by: Janet Casey <jcasey@gnu.org>
-
-%%license-verified-on: 2001-04-23
-
-%%maintainer: Moritz Schulte <libgcrypt 'at' g10code.com>
-
-%%updated: 2004-04-15
-
-%%keywords: encryption, public key, digital signature, hash, libgcrypt
-
-%%interface: Command line
-
-%%programs:
-
-%%GNU: yes
-
-%%web-page: http://www.gnupg.org
-
-%%support: Paid extension/consulting from http://www.g10code.com
-
-%%doc: Programmer reference in Texinfo, Postscript, HTML included
-
-%%developers: Matthew Skala, Michael Roth, Niklas Hernaeus, Remi
-Guyomarch, Simon Josefsson, Werner Koch, Moritz Schulte.
-
-%%contributors:
-
-%%sponsors:
-
-%%source-tarball: ftp://ftp.gnupg.org/gcrypt/libgcrypt/
-
-%%source-info:
-
-%%source-template:
-
-%%debian:
-
-%%rpm:
-
-%%repository: See http://www.gnupg.org/cvs-access.html
-
-%%related:
-
-%%related-outside-directory:
-
-%%source-language: C
-
-%%supported-languages: C, C++
-
-%%use-requirements:
-
-%%build-prerequisites:
-
-%%weak-prerequisites:
-
-%%source-prerequisites:
-
-%%version: 1.3.0-cvs released ...
-
-%%announce-list: <gnupg-announce@gnupg.org>
- <gnupg-announce-request@gnupg.org>
-
-%%announce-news:
-
-%%help-list:
-
-%%help-news:
-
-%%help-irc-channel:
-
-%%dev-irc-channel:
-
-%%dev-list: <gcrypt-devel@gnupg.org>
- <gcrypt-devel-request@gnupg.org>
-
-%%dev-news:
-
-%%bug-list:
-
-%%bug-database:
-
-%%entry-written-by: Werner Koch <wk@gnupg.org>
-
-%%entry-added: 2001-06-01
-
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = m4
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = libtool.m4 socklen.m4 noexecstack.m4 gpg-error.m4
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu m4/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
else
AC_CACHE_CHECK([for build system executable suffix], bfd_cv_build_exeext,
[rm -f conftest*
- echo 'int main () { return 0; }' > conftest.c
+ echo 'int main (void) { return 0; }' > conftest.c
bfd_cv_build_exeext=
${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
for file in conftest.*; do
# gpg-error.m4 - autoconf macro to detect libgpg-error.
-# Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018, 2020, 2021
+# Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018, 2020, 2021, 2022
# g10 Code GmbH
#
# This file is free software; as a special exception the author gives
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
-# Last-changed: 2022-02-15
+# Last-changed: 2023-04-01
-
-dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION,
-dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
dnl
-dnl Test for libgpg-error and define GPG_ERROR_CFLAGS, GPG_ERROR_LIBS,
-dnl GPG_ERROR_MT_CFLAGS, and GPG_ERROR_MT_LIBS. The _MT_ variants are
-dnl used for programs requireing real multi thread support.
+dnl Find gpg-error-config, for backward compatibility
dnl
-dnl If a prefix option is not used, the config script is first
-dnl searched in $SYSROOT/bin and then along $PATH. If the used
-dnl config script does not match the host specification the script
-dnl is added to the gpg_config_script_warn variable.
-dnl
-AC_DEFUN([AM_PATH_GPG_ERROR],
-[ AC_REQUIRE([AC_CANONICAL_HOST])
+dnl _AM_PATH_POSSIBLE_GPG_ERROR_CONFIG
+AC_DEFUN([_AM_PATH_POSSIBLE_GPG_ERROR_CONFIG],[dnl
gpg_error_config_prefix=""
dnl --with-libgpg-error-prefix=PFX is the preferred name for this option,
dnl since that is consistent with how our three siblings use the directory/
fi
AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no)
- min_gpg_error_version=ifelse([$1], ,1.33,$1)
- ok=no
+])
+dnl
+dnl Find gpgrt-config, which uses .pc file
+dnl (minimum pkg-config functionality, supporting cross build)
+dnl
+dnl _AM_PATH_GPGRT_CONFIG
+AC_DEFUN([_AM_PATH_GPGRT_CONFIG],[dnl
AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no, [$prefix/bin:$PATH])
if test "$GPGRT_CONFIG" != "no"; then
# Determine gpgrt_libdir
fi
if test -n "$gpgrt_libdir"; then break; fi
done
- else
- # When we cannot determine system libdir-format, use this:
+ fi
+ if test -z "$gpgrt_libdir"; then
+ # No valid pkgconfig dir in any of the system directories, fallback
gpgrt_libdir=${possible_libdir1}
fi
else
AC_MSG_NOTICE([Use gpgrt-config with $gpgrt_libdir as gpg-error-config])
gpg_error_config_version=`$GPG_ERROR_CONFIG --modversion`
else
+ gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
unset GPGRT_CONFIG
fi
elif test "$GPG_ERROR_CONFIG" != "no"; then
gpg_error_config_version=`$GPG_ERROR_CONFIG --version`
unset GPGRT_CONFIG
fi
+])
+
+dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION,
+dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+dnl
+dnl Test for libgpg-error and define GPG_ERROR_CFLAGS, GPG_ERROR_LIBS,
+dnl GPG_ERROR_MT_CFLAGS, and GPG_ERROR_MT_LIBS. The _MT_ variants are
+dnl used for programs requireing real multi thread support.
+dnl
+dnl If a prefix option is not used, the config script is first
+dnl searched in $SYSROOT/bin and then along $PATH. If the used
+dnl config script does not match the host specification the script
+dnl is added to the gpg_config_script_warn variable.
+dnl
+AC_DEFUN([AM_PATH_GPG_ERROR],[dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([_AM_PATH_POSSIBLE_GPG_ERROR_CONFIG])dnl
+AC_REQUIRE([_AM_PATH_GPGRT_CONFIG])dnl
+ min_gpg_error_version=ifelse([$1], ,1.33,$1)
+ ok=no
if test "$GPG_ERROR_CONFIG" != "no"; then
req_major=`echo $min_gpg_error_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
AC_CACHE_CHECK([whether assembler supports --noexecstack option],
cl_cv_as_noexecstack, [dnl
cat > conftest.c <<EOF
-void foo() {}
+void foo(void) {}
EOF
if AC_TRY_COMMAND([${CC} $CFLAGS $CPPFLAGS
-S -o conftest.s conftest.c >/dev/null]) \
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 1992, 1999, 2000, 2002 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+# 1.5 leads to a combinatorial explosion due to all the conditionals
+# I was not able to build it with 64Megs - 1.6 fixes this.
+# not anymore required: AUTOMAKE_OPTIONS = 1.6
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = mpi
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmpi_la_LIBADD =
+am_libmpi_la_OBJECTS = mpi-add.lo mpi-bit.lo mpi-cmp.lo mpi-div.lo \
+ mpi-gcd.lo mpi-inline.lo mpi-inv.lo mpi-mul.lo mpi-mod.lo \
+ mpi-pow.lo mpi-mpow.lo mpi-scan.lo mpicoder.lo mpih-div.lo \
+ mpih-mul.lo mpih-const-time.lo mpiutil.lo ec.lo ec-ed25519.lo \
+ ec-nist.lo ec-hw-s390x.lo
+@MPI_MOD_ASM_MPIH_ADD1_FALSE@@MPI_MOD_C_MPIH_ADD1_TRUE@am__objects_1 = mpih-add1.lo
+@MPI_MOD_ASM_MPIH_ADD1_TRUE@am__objects_1 = mpih-add1-asm.lo
+@MPI_MOD_ASM_MPIH_SUB1_FALSE@@MPI_MOD_C_MPIH_SUB1_TRUE@am__objects_2 = mpih-sub1.lo
+@MPI_MOD_ASM_MPIH_SUB1_TRUE@am__objects_2 = mpih-sub1-asm.lo
+@MPI_MOD_ASM_MPIH_MUL1_FALSE@@MPI_MOD_C_MPIH_MUL1_TRUE@am__objects_3 = mpih-mul1.lo
+@MPI_MOD_ASM_MPIH_MUL1_TRUE@am__objects_3 = mpih-mul1-asm.lo
+@MPI_MOD_ASM_MPIH_MUL2_FALSE@@MPI_MOD_C_MPIH_MUL2_TRUE@am__objects_4 = mpih-mul2.lo
+@MPI_MOD_ASM_MPIH_MUL2_TRUE@am__objects_4 = mpih-mul2-asm.lo
+@MPI_MOD_ASM_MPIH_MUL3_FALSE@@MPI_MOD_C_MPIH_MUL3_TRUE@am__objects_5 = mpih-mul3.lo
+@MPI_MOD_ASM_MPIH_MUL3_TRUE@am__objects_5 = mpih-mul3-asm.lo
+@MPI_MOD_ASM_MPIH_LSHIFT_FALSE@@MPI_MOD_C_MPIH_LSHIFT_TRUE@am__objects_6 = mpih-lshift.lo
+@MPI_MOD_ASM_MPIH_LSHIFT_TRUE@am__objects_6 = mpih-lshift-asm.lo
+@MPI_MOD_ASM_MPIH_RSHIFT_FALSE@@MPI_MOD_C_MPIH_RSHIFT_TRUE@am__objects_7 = mpih-rshift.lo
+@MPI_MOD_ASM_MPIH_RSHIFT_TRUE@am__objects_7 = mpih-rshift-asm.lo
+@MPI_MOD_ASM_UDIV_FALSE@@MPI_MOD_C_UDIV_TRUE@am__objects_8 = udiv.lo
+@MPI_MOD_ASM_UDIV_TRUE@am__objects_8 = udiv-asm.lo
+@MPI_MOD_ASM_UDIV_QRNND_FALSE@@MPI_MOD_C_UDIV_QRNND_TRUE@am__objects_9 = udiv-qrnnd.lo
+@MPI_MOD_ASM_UDIV_QRNND_TRUE@am__objects_9 = udiv-qrnnd-asm.lo
+nodist_libmpi_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9)
+libmpi_la_OBJECTS = $(am_libmpi_la_OBJECTS) \
+ $(nodist_libmpi_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libmpi_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libmpi_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/ec-ed25519.Plo \
+ ./$(DEPDIR)/ec-hw-s390x.Plo ./$(DEPDIR)/ec-nist.Plo \
+ ./$(DEPDIR)/ec.Plo ./$(DEPDIR)/mpi-add.Plo \
+ ./$(DEPDIR)/mpi-bit.Plo ./$(DEPDIR)/mpi-cmp.Plo \
+ ./$(DEPDIR)/mpi-div.Plo ./$(DEPDIR)/mpi-gcd.Plo \
+ ./$(DEPDIR)/mpi-inline.Plo ./$(DEPDIR)/mpi-inv.Plo \
+ ./$(DEPDIR)/mpi-mod.Plo ./$(DEPDIR)/mpi-mpow.Plo \
+ ./$(DEPDIR)/mpi-mul.Plo ./$(DEPDIR)/mpi-pow.Plo \
+ ./$(DEPDIR)/mpi-scan.Plo ./$(DEPDIR)/mpicoder.Plo \
+ ./$(DEPDIR)/mpih-add1-asm.Plo ./$(DEPDIR)/mpih-add1.Plo \
+ ./$(DEPDIR)/mpih-const-time.Plo ./$(DEPDIR)/mpih-div.Plo \
+ ./$(DEPDIR)/mpih-lshift-asm.Plo ./$(DEPDIR)/mpih-lshift.Plo \
+ ./$(DEPDIR)/mpih-mul.Plo ./$(DEPDIR)/mpih-mul1-asm.Plo \
+ ./$(DEPDIR)/mpih-mul1.Plo ./$(DEPDIR)/mpih-mul2-asm.Plo \
+ ./$(DEPDIR)/mpih-mul2.Plo ./$(DEPDIR)/mpih-mul3-asm.Plo \
+ ./$(DEPDIR)/mpih-mul3.Plo ./$(DEPDIR)/mpih-rshift-asm.Plo \
+ ./$(DEPDIR)/mpih-rshift.Plo ./$(DEPDIR)/mpih-sub1-asm.Plo \
+ ./$(DEPDIR)/mpih-sub1.Plo ./$(DEPDIR)/mpiutil.Plo \
+ ./$(DEPDIR)/udiv-asm.Plo ./$(DEPDIR)/udiv-qrnnd-asm.Plo \
+ ./$(DEPDIR)/udiv-qrnnd.Plo ./$(DEPDIR)/udiv.Plo
+am__mv = mv -f
+CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
+LTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CCASFLAGS) $(CCASFLAGS)
+AM_V_CPPAS = $(am__v_CPPAS_@AM_V@)
+am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@)
+am__v_CPPAS_0 = @echo " CPPAS " $@;
+am__v_CPPAS_1 =
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmpi_la_SOURCES) $(EXTRA_libmpi_la_SOURCES) \
+ $(nodist_libmpi_la_SOURCES)
+DIST_SOURCES = $(libmpi_la_SOURCES) $(EXTRA_libmpi_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Need to include ../src in addition to top_srcdir because gcrypt.h is
+# a built header.
+AM_CPPFLAGS = -I../src -I$(top_srcdir)/src
+AM_CFLAGS = $(GPG_ERROR_CFLAGS)
+AM_ASFLAGS = $(MPI_SFLAGS)
+AM_CCASFLAGS = $(NOEXECSTACK_FLAGS)
+EXTRA_DIST = config.links
+DISTCLEANFILES = mpi-asm-defs.h \
+ mpih-add1-asm.S mpih-mul1-asm.S mpih-mul2-asm.S mpih-mul3-asm.S \
+ mpih-lshift-asm.S mpih-rshift-asm.S mpih-sub1-asm.S asm-syntax.h \
+ mpih-add1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c \
+ mpih-lshift.c mpih-rshift.c mpih-sub1.c \
+ sysdep.h mod-source-info.h
+
+@MPI_MOD_ASM_MPIH_ADD1_FALSE@@MPI_MOD_C_MPIH_ADD1_FALSE@mpih_add1 =
+@MPI_MOD_ASM_MPIH_ADD1_FALSE@@MPI_MOD_C_MPIH_ADD1_TRUE@mpih_add1 = mpih-add1.c
+
+# Beware: The following list is not a comment but grepped by
+# config.links to get the list of symlinked modules
+# Optional modules are marked with an O in the second column.
+#BEGIN_ASM_LIST
+# mpih-add1 C
+# mpih-sub1 C
+# mpih-mul1 C
+# mpih-mul2 C
+# mpih-mul3 C
+# mpih-lshift C
+# mpih-rshift C
+# udiv O
+# udiv-qrnnd O
+#END_ASM_LIST
+
+# Note: This function has not yet been implemented. There is only a dummy in
+# generic/
+# udiv-w-sdiv O
+
+# And we need to have conditionals for all modules because
+# we don't know whether they are .c or .S. Very ugly; I know.
+# Remember to define them all in configure.ac
+@MPI_MOD_ASM_MPIH_ADD1_TRUE@mpih_add1 = mpih-add1-asm.S
+@MPI_MOD_ASM_MPIH_SUB1_FALSE@@MPI_MOD_C_MPIH_SUB1_FALSE@mpih_sub1 =
+@MPI_MOD_ASM_MPIH_SUB1_FALSE@@MPI_MOD_C_MPIH_SUB1_TRUE@mpih_sub1 = mpih-sub1.c
+@MPI_MOD_ASM_MPIH_SUB1_TRUE@mpih_sub1 = mpih-sub1-asm.S
+@MPI_MOD_ASM_MPIH_MUL1_FALSE@@MPI_MOD_C_MPIH_MUL1_FALSE@mpih_mul1 =
+@MPI_MOD_ASM_MPIH_MUL1_FALSE@@MPI_MOD_C_MPIH_MUL1_TRUE@mpih_mul1 = mpih-mul1.c
+@MPI_MOD_ASM_MPIH_MUL1_TRUE@mpih_mul1 = mpih-mul1-asm.S
+@MPI_MOD_ASM_MPIH_MUL2_FALSE@@MPI_MOD_C_MPIH_MUL2_FALSE@mpih_mul2 =
+@MPI_MOD_ASM_MPIH_MUL2_FALSE@@MPI_MOD_C_MPIH_MUL2_TRUE@mpih_mul2 = mpih-mul2.c
+@MPI_MOD_ASM_MPIH_MUL2_TRUE@mpih_mul2 = mpih-mul2-asm.S
+@MPI_MOD_ASM_MPIH_MUL3_FALSE@@MPI_MOD_C_MPIH_MUL3_FALSE@mpih_mul3 =
+@MPI_MOD_ASM_MPIH_MUL3_FALSE@@MPI_MOD_C_MPIH_MUL3_TRUE@mpih_mul3 = mpih-mul3.c
+@MPI_MOD_ASM_MPIH_MUL3_TRUE@mpih_mul3 = mpih-mul3-asm.S
+@MPI_MOD_ASM_MPIH_LSHIFT_FALSE@@MPI_MOD_C_MPIH_LSHIFT_FALSE@mpih_lshift =
+@MPI_MOD_ASM_MPIH_LSHIFT_FALSE@@MPI_MOD_C_MPIH_LSHIFT_TRUE@mpih_lshift = mpih-lshift.c
+@MPI_MOD_ASM_MPIH_LSHIFT_TRUE@mpih_lshift = mpih-lshift-asm.S
+@MPI_MOD_ASM_MPIH_RSHIFT_FALSE@@MPI_MOD_C_MPIH_RSHIFT_FALSE@mpih_rshift =
+@MPI_MOD_ASM_MPIH_RSHIFT_FALSE@@MPI_MOD_C_MPIH_RSHIFT_TRUE@mpih_rshift = mpih-rshift.c
+@MPI_MOD_ASM_MPIH_RSHIFT_TRUE@mpih_rshift = mpih-rshift-asm.S
+@MPI_MOD_ASM_UDIV_FALSE@@MPI_MOD_C_UDIV_FALSE@udiv =
+@MPI_MOD_ASM_UDIV_FALSE@@MPI_MOD_C_UDIV_TRUE@udiv = udiv.c
+@MPI_MOD_ASM_UDIV_TRUE@udiv = udiv-asm.S
+@MPI_MOD_ASM_UDIV_QRNND_FALSE@@MPI_MOD_C_UDIV_QRNND_FALSE@udiv_qrnnd =
+@MPI_MOD_ASM_UDIV_QRNND_FALSE@@MPI_MOD_C_UDIV_QRNND_TRUE@udiv_qrnnd = udiv-qrnnd.c
+@MPI_MOD_ASM_UDIV_QRNND_TRUE@udiv_qrnnd = udiv-qrnnd-asm.S
+noinst_LTLIBRARIES = libmpi.la
+libmpi_la_LDFLAGS =
+nodist_libmpi_la_SOURCES = $(mpih_add1) $(mpih_sub1) $(mpih_mul1) \
+ $(mpih_mul2) $(mpih_mul3) $(mpih_lshift) $(mpih_rshift) \
+ $(udiv) $(udiv_qrnnd)
+
+libmpi_la_SOURCES = longlong.h \
+ mpi-add.c \
+ mpi-bit.c \
+ mpi-cmp.c \
+ mpi-div.c \
+ mpi-gcd.c \
+ mpi-internal.h \
+ mpi-inline.h \
+ mpi-inline.c \
+ mpi-inv.c \
+ mpi-mul.c \
+ mpi-mod.c \
+ mpi-pow.c \
+ mpi-mpow.c \
+ mpi-scan.c \
+ mpicoder.c \
+ mpih-div.c \
+ mpih-mul.c \
+ mpih-const-time.c \
+ mpiutil.c \
+ ec.c ec-internal.h ec-ed25519.c ec-nist.c ec-inline.h \
+ ec-hw-s390x.c
+
+EXTRA_libmpi_la_SOURCES = asm-common-aarch64.h asm-common-amd64.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mpi/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu mpi/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmpi.la: $(libmpi_la_OBJECTS) $(libmpi_la_DEPENDENCIES) $(EXTRA_libmpi_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libmpi_la_LINK) $(libmpi_la_OBJECTS) $(libmpi_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ec-ed25519.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ec-hw-s390x.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ec-nist.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ec.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-add.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-bit.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-cmp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-div.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-gcd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-inline.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-inv.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-mod.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-mpow.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-mul.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-pow.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-scan.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpicoder.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-add1-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-add1.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-const-time.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-div.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-lshift-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-lshift.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul1-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul1.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul2-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul3-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul3.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-rshift-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-rshift.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-sub1-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-sub1.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpiutil.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udiv-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udiv-qrnnd-asm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udiv-qrnnd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udiv.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.S.o:
+@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $<
+
+.S.obj:
+@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.S.lo:
+@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@ $<
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/ec-ed25519.Plo
+ -rm -f ./$(DEPDIR)/ec-hw-s390x.Plo
+ -rm -f ./$(DEPDIR)/ec-nist.Plo
+ -rm -f ./$(DEPDIR)/ec.Plo
+ -rm -f ./$(DEPDIR)/mpi-add.Plo
+ -rm -f ./$(DEPDIR)/mpi-bit.Plo
+ -rm -f ./$(DEPDIR)/mpi-cmp.Plo
+ -rm -f ./$(DEPDIR)/mpi-div.Plo
+ -rm -f ./$(DEPDIR)/mpi-gcd.Plo
+ -rm -f ./$(DEPDIR)/mpi-inline.Plo
+ -rm -f ./$(DEPDIR)/mpi-inv.Plo
+ -rm -f ./$(DEPDIR)/mpi-mod.Plo
+ -rm -f ./$(DEPDIR)/mpi-mpow.Plo
+ -rm -f ./$(DEPDIR)/mpi-mul.Plo
+ -rm -f ./$(DEPDIR)/mpi-pow.Plo
+ -rm -f ./$(DEPDIR)/mpi-scan.Plo
+ -rm -f ./$(DEPDIR)/mpicoder.Plo
+ -rm -f ./$(DEPDIR)/mpih-add1-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-add1.Plo
+ -rm -f ./$(DEPDIR)/mpih-const-time.Plo
+ -rm -f ./$(DEPDIR)/mpih-div.Plo
+ -rm -f ./$(DEPDIR)/mpih-lshift-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-lshift.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul1-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul1.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul2-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul2.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul3-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul3.Plo
+ -rm -f ./$(DEPDIR)/mpih-rshift-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-rshift.Plo
+ -rm -f ./$(DEPDIR)/mpih-sub1-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-sub1.Plo
+ -rm -f ./$(DEPDIR)/mpiutil.Plo
+ -rm -f ./$(DEPDIR)/udiv-asm.Plo
+ -rm -f ./$(DEPDIR)/udiv-qrnnd-asm.Plo
+ -rm -f ./$(DEPDIR)/udiv-qrnnd.Plo
+ -rm -f ./$(DEPDIR)/udiv.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/ec-ed25519.Plo
+ -rm -f ./$(DEPDIR)/ec-hw-s390x.Plo
+ -rm -f ./$(DEPDIR)/ec-nist.Plo
+ -rm -f ./$(DEPDIR)/ec.Plo
+ -rm -f ./$(DEPDIR)/mpi-add.Plo
+ -rm -f ./$(DEPDIR)/mpi-bit.Plo
+ -rm -f ./$(DEPDIR)/mpi-cmp.Plo
+ -rm -f ./$(DEPDIR)/mpi-div.Plo
+ -rm -f ./$(DEPDIR)/mpi-gcd.Plo
+ -rm -f ./$(DEPDIR)/mpi-inline.Plo
+ -rm -f ./$(DEPDIR)/mpi-inv.Plo
+ -rm -f ./$(DEPDIR)/mpi-mod.Plo
+ -rm -f ./$(DEPDIR)/mpi-mpow.Plo
+ -rm -f ./$(DEPDIR)/mpi-mul.Plo
+ -rm -f ./$(DEPDIR)/mpi-pow.Plo
+ -rm -f ./$(DEPDIR)/mpi-scan.Plo
+ -rm -f ./$(DEPDIR)/mpicoder.Plo
+ -rm -f ./$(DEPDIR)/mpih-add1-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-add1.Plo
+ -rm -f ./$(DEPDIR)/mpih-const-time.Plo
+ -rm -f ./$(DEPDIR)/mpih-div.Plo
+ -rm -f ./$(DEPDIR)/mpih-lshift-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-lshift.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul1-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul1.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul2-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul2.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul3-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-mul3.Plo
+ -rm -f ./$(DEPDIR)/mpih-rshift-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-rshift.Plo
+ -rm -f ./$(DEPDIR)/mpih-sub1-asm.Plo
+ -rm -f ./$(DEPDIR)/mpih-sub1.Plo
+ -rm -f ./$(DEPDIR)/mpiutil.Plo
+ -rm -f ./$(DEPDIR)/udiv-asm.Plo
+ -rm -f ./$(DEPDIR)/udiv-qrnnd-asm.Plo
+ -rm -f ./$(DEPDIR)/udiv-qrnnd.Plo
+ -rm -f ./$(DEPDIR)/udiv.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
#include "context.h"
#include "ec-context.h"
#include "ec-inline.h"
-
-
-/* These variables are used to generate masks from conditional operation
- * flag parameters. Use of volatile prevents compiler optimizations from
- * converting AND-masking to conditional branches. */
-static volatile mpi_limb_t vzero = 0;
-static volatile mpi_limb_t vone = 1;
+#include "const-time.h"
static inline
s_is_negative = LO32_LIMB64(s[3]) >> 31;
- mask2 = vzero - s_is_negative;
- mask1 = s_is_negative - vone;
+ mask2 = ct_limb_gen_mask(s_is_negative);
+ mask1 = ct_limb_gen_inv_mask(s_is_negative);
STORE64_COND(wp, 0, mask2, o[0], mask1, s[0]);
STORE64_COND(wp, 1, mask2, o[1], mask1, s[1]);
s_is_negative = (HI32_LIMB64(s[3]) >> 31);
- mask2 = vzero - s_is_negative;
- mask1 = s_is_negative - vone;
+ mask2 = ct_limb_gen_mask(s_is_negative);
+ mask1 = ct_limb_gen_inv_mask(s_is_negative);
STORE64_COND(wp, 0, mask2, d[0], mask1, s[0]);
STORE64_COND(wp, 1, mask2, d[1], mask1, s[1]);
s_is_negative = LO32_LIMB64(s[4]) >> 31;
d_is_negative = LO32_LIMB64(d[4]) >> 31;
- mask3 = vzero - d_is_negative;
- mask2 = (vzero - s_is_negative) & ~mask3;
- mask1 = (s_is_negative - vone) & ~mask3;
+ mask3 = ct_limb_gen_mask(d_is_negative);
+ mask2 = ct_limb_gen_mask(s_is_negative) & ~mask3;
+ mask1 = ct_limb_gen_inv_mask(s_is_negative) & ~mask3;
s[0] = LIMB_OR64(MASK_AND64(mask2, d[0]), MASK_AND64(mask1, s[0]));
s[1] = LIMB_OR64(MASK_AND64(mask2, d[1]), MASK_AND64(mask1, s[1]));
p_mult[0 + 3][1], p_mult[0 + 3][0]);
s_is_negative = LO32_LIMB64(s[6]) >> 31;
- mask2 = vzero - s_is_negative;
- mask1 = s_is_negative - vone;
+ mask2 = ct_limb_gen_mask(s_is_negative);
+ mask1 = ct_limb_gen_inv_mask(s_is_negative);
STORE64_COND(wp, 0, mask2, d[0], mask1, s[0]);
STORE64_COND(wp, 1, mask2, d[1], mask1, s[1]);
/* "mod p" */
cy = _gcry_mpih_sub_n (wp, wp, ctx->p->d, wsize);
_gcry_mpih_add_n (s, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, s, wsize, (cy != 0UL));
+ mpih_set_cond (wp, s, wsize, mpih_limb_is_not_zero (cy));
w->nlimbs = wsize;
MPN_NORMALIZE (wp, w->nlimbs);
_gcry_mpih_add_n (wp, up, vp, wsize);
borrow = _gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (borrow == 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_zero (borrow));
wp[LIMB_SIZE_25519-1] &= ~((mpi_limb_t)1 << (255 % BITS_PER_MPI_LIMB));
}
borrow = _gcry_mpih_sub_n (wp, up, vp, wsize);
_gcry_mpih_add_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (borrow != 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_not_zero (borrow));
wp[LIMB_SIZE_25519-1] &= ~((mpi_limb_t)1 << (255 % BITS_PER_MPI_LIMB));
}
_gcry_mpih_add_n (wp, wp, n, wsize);
cy = _gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (cy == 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_zero (cy));
}
static void
cy = _gcry_mpih_add_n (wp, up, vp, wsize);
_gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (cy != 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_not_zero (cy));
}
static void
borrow = _gcry_mpih_sub_n (wp, up, vp, wsize);
_gcry_mpih_add_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (borrow != 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_not_zero (borrow));
}
static void
_gcry_mpih_add_n (wp, wp, n, wsize);
cy = _gcry_mpih_sub_n (n, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, n, wsize, (cy == 0UL));
+ mpih_set_cond (wp, n, wsize, mpih_limb_is_zero (cy));
}
static void
cy = _gcry_mpih_add_n (wp, wp, n, wsize);
borrow = _gcry_mpih_sub_n (s, wp, ctx->p->d, wsize);
- mpih_set_cond (wp, s, wsize, (cy != 0UL) | (borrow == 0UL));
+ mpih_set_cond (wp, s, wsize,
+ mpih_limb_is_not_zero (cy) | mpih_limb_is_zero (borrow));
w->nlimbs = wsize;
MPN_NORMALIZE (wp, w->nlimbs);
# define UMUL_TIME 40
# define UDIV_TIME 80
# endif
-# ifndef LONGLONG_STANDALONE
+# if !defined(LONGLONG_STANDALONE) && !defined(ASM_DISABLED)
# define udiv_qrnnd(q, r, n1, n0, d) \
do { USItype __r; \
(q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
(r) = __r; \
} while (0)
extern USItype __udiv_qrnnd ();
-# endif /* !LONGLONG_STANDALONE */
+# endif /* !LONGLONG_STANDALONE && !ASM_DISABLED */
# define count_leading_zeros(count, x) \
do { \
USItype __tmp; \
#endif /*BITS_PER_MPI_LIMB*/
#include "mpi.h"
+#include "const-time.h"
/* If KARATSUBA_THRESHOLD is not already defined, define it to a
* value which is good on most machines. */
#define mpih_abs_cond(w,u,s,o) _gcry_mpih_abs_cond ((w),(u),(s),(o))
#define mpih_mod(v,vs,u,us) _gcry_mpih_mod ((v),(vs),(u),(us))
+DEFINE_CT_TYPE_GEN_MASK(limb, mpi_limb_t)
+DEFINE_CT_TYPE_GEN_INV_MASK(limb, mpi_limb_t)
+
+static inline int
+mpih_limb_is_zero (mpi_limb_t a)
+{
+ /* Sign bit set if A == 0. */
+ a = ~a & ~(-a);
+
+ return a >> (BITS_PER_MPI_LIMB - 1);
+}
+
+static inline int
+mpih_limb_is_not_zero (mpi_limb_t a)
+{
+ /* Sign bit set if A != 0. */
+ a = a | (-a);
+
+ return a >> (BITS_PER_MPI_LIMB - 1);
+}
+
void _gcry_mpih_set_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
unsigned long op_enable);
mpi_limb_t _gcry_mpih_add_n_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_ptr_t vp,
#include <stdlib.h>
#include "mpi-internal.h"
#include "g10lib.h"
+#include "const-time.h"
+#include "longlong.h"
#define A_LIMB_1 ((mpi_limb_t)1)
-/* These variables are used to generate masks from conditional operation
- * flag parameters. Use of volatile prevents compiler optimizations from
- * converting AND-masking to conditional branches. */
-static volatile mpi_limb_t vzero = 0;
-static volatile mpi_limb_t vone = 1;
+
+/*
+ * Return 1 if X > Y and otherwise return 0.
+ */
+static inline mpi_limb_t
+mpih_ct_limb_greater_than (mpi_limb_t x, mpi_limb_t y)
+{
+ mpi_limb_t diff_hi, diff_lo;
+ sub_ddmmss (diff_hi, diff_lo, 0, y, 0, x);
+ return diff_hi >> (BITS_PER_MPI_LIMB - 1);
+}
+
+
+/*
+ * Return 1 if X < Y and otherwise return 0.
+ */
+static inline mpi_limb_t
+mpih_ct_limb_less_than (mpi_limb_t x, mpi_limb_t y)
+{
+ return mpih_ct_limb_greater_than (y, x);
+}
+
/*
* W = U when OP_ENABLED=1
_gcry_mpih_set_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
unsigned long op_enable)
{
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ mpi_limb_t mask1 = ct_limb_gen_mask(op_enable);
+ mpi_limb_t mask2 = ct_limb_gen_inv_mask(op_enable);
mpi_size_t i;
- mpi_limb_t mask1 = vzero - op_enable;
- mpi_limb_t mask2 = op_enable - vone;
for (i = 0; i < usize; i++)
{
_gcry_mpih_add_n_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_ptr_t vp,
mpi_size_t usize, unsigned long op_enable)
{
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ mpi_limb_t mask1 = ct_limb_gen_mask(op_enable);
+ mpi_limb_t mask2 = ct_limb_gen_inv_mask(op_enable);
mpi_size_t i;
mpi_limb_t cy;
- mpi_limb_t mask1 = vzero - op_enable;
- mpi_limb_t mask2 = op_enable - vone;
cy = 0;
for (i = 0; i < usize; i++)
{
mpi_limb_t u = up[i];
mpi_limb_t x = u + vp[i];
- mpi_limb_t cy1 = x < u;
+ mpi_limb_t cy1 = mpih_ct_limb_less_than(x, u);
mpi_limb_t cy2;
x = x + cy;
- cy2 = x < cy;
+ cy2 = mpih_ct_limb_less_than(x, cy);
cy = cy1 | cy2;
wp[i] = (u & mask2) | (x & mask1);
}
_gcry_mpih_sub_n_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_ptr_t vp,
mpi_size_t usize, unsigned long op_enable)
{
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ mpi_limb_t mask1 = ct_limb_gen_mask(op_enable);
+ mpi_limb_t mask2 = ct_limb_gen_inv_mask(op_enable);
mpi_size_t i;
mpi_limb_t cy;
- mpi_limb_t mask1 = vzero - op_enable;
- mpi_limb_t mask2 = op_enable - vone;
cy = 0;
for (i = 0; i < usize; i++)
{
mpi_limb_t u = up[i];
mpi_limb_t x = u - vp[i];
- mpi_limb_t cy1 = x > u;
+ mpi_limb_t cy1 = mpih_ct_limb_greater_than(x, u);
mpi_limb_t cy2;
- cy2 = x < cy;
+ cy2 = mpih_ct_limb_less_than(x, cy);
x = x - cy;
cy = cy1 | cy2;
wp[i] = (u & mask2) | (x & mask1);
_gcry_mpih_swap_cond (mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t usize,
unsigned long op_enable)
{
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ mpi_limb_t mask1 = ct_limb_gen_mask(op_enable);
+ mpi_limb_t mask2 = ct_limb_gen_inv_mask(op_enable);
mpi_size_t i;
- mpi_limb_t mask1 = vzero - op_enable;
- mpi_limb_t mask2 = op_enable - vone;
for (i = 0; i < usize; i++)
{
_gcry_mpih_abs_cond (mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize,
unsigned long op_enable)
{
- mpi_size_t i;
- mpi_limb_t mask1 = vzero - op_enable;
- mpi_limb_t mask2 = op_enable - vone;
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ mpi_limb_t mask1 = ct_limb_gen_mask(op_enable);
+ mpi_limb_t mask2 = ct_limb_gen_inv_mask(op_enable);
mpi_limb_t cy = op_enable;
+ mpi_size_t i;
for (i = 0; i < usize; i++)
{
mpi_limb_t u = up[i];
mpi_limb_t x = ~u + cy;
- cy = (x < ~u);
+ cy = mpih_ct_limb_less_than(x, ~u);
wp[i] = (u & mask2) | (x & mask1);
}
}
unsigned int limbno = j / BITS_PER_MPI_LIMB;
unsigned int bitno = j % BITS_PER_MPI_LIMB;
mpi_limb_t limb = vp[limbno];
- unsigned int the_bit = ((limb & (A_LIMB_1 << bitno)) ? 1 : 0);
+ unsigned int the_bit = (limb >> bitno) & 1;
mpi_limb_t underflow;
mpi_limb_t overflow;
mpi_size_t i;
for (i = 1; i < usize; i++)
- is_all_zero &= (up[i] == 0);
+ is_all_zero &= mpih_limb_is_zero (up[i]);
if (is_all_zero)
- return up[0] - v;
+ {
+ if (up[0] < v)
+ return -1;
+ else if (up[0] > v)
+ return 1;
+ else
+ return 0;
+ }
return 1;
}
#include "g10lib.h"
#include "mpi-internal.h"
#include "mod-source-info.h"
+#include "const-time.h"
#if SIZEOF_UNSIGNED_INT == 2
/* Constants allocated right away at startup. */
static gcry_mpi_t constants[MPI_NUMBER_OF_CONSTANTS];
-/* These variables are used to generate masks from conditional operation
- * flag parameters. Use of volatile prevents compiler optimizations from
- * converting AND-masking to conditional branches. */
-static volatile mpi_limb_t vzero = 0;
-static volatile mpi_limb_t vone = 1;
-
const char *
_gcry_mpi_get_hw_config (void)
gcry_mpi_t
_gcry_mpi_set_cond (gcry_mpi_t w, const gcry_mpi_t u, unsigned long set)
{
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ mpi_limb_t mask1 = ct_limb_gen_mask(set);
+ mpi_limb_t mask2 = ct_limb_gen_inv_mask(set);
mpi_size_t i;
mpi_size_t nlimbs = u->alloced;
- mpi_limb_t mask1 = vzero - set;
- mpi_limb_t mask2 = set - vone;
mpi_limb_t xu;
mpi_limb_t xw;
mpi_limb_t *uu = u->d;
void
_gcry_mpi_swap_cond (gcry_mpi_t a, gcry_mpi_t b, unsigned long swap)
{
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ mpi_limb_t mask1 = ct_limb_gen_mask(swap);
+ mpi_limb_t mask2 = ct_limb_gen_inv_mask(swap);
mpi_size_t i;
mpi_size_t nlimbs;
- mpi_limb_t mask1 = vzero - swap;
- mpi_limb_t mask2 = swap - vone;
mpi_limb_t *ua = a->d;
mpi_limb_t *ub = b->d;
mpi_limb_t xa;
# The rndjent module needs to be compiled without optimization. */
if ENABLE_O_FLAG_MUNGING
-o_flag_munging = sed -e 's/-O\([1-9sg][1-9sg]*\)/-O0/g' -e 's/-Ofast/-O0/g'
+o_flag_munging = sed -e 's/-O\([1-9sgz][1-9sgz]*\)/-O0/g' -e 's/-Ofast/-O0/g'
else
o_flag_munging = cat
endif
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Makefile for cipher modules
+# Copyright (C) 2008 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+# Process this file with automake to produce Makefile.in
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = random
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_librandom_la_OBJECTS = random.lo random-csprng.lo random-drbg.lo \
+ random-system.lo rndjent.lo rndhw.lo
+librandom_la_OBJECTS = $(am_librandom_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/jitterentropy-base.Plo \
+ ./$(DEPDIR)/jitterentropy-gcd.Plo \
+ ./$(DEPDIR)/jitterentropy-health.Plo \
+ ./$(DEPDIR)/jitterentropy-noise.Plo \
+ ./$(DEPDIR)/jitterentropy-sha3.Plo \
+ ./$(DEPDIR)/jitterentropy-timer.Plo \
+ ./$(DEPDIR)/random-csprng.Plo ./$(DEPDIR)/random-drbg.Plo \
+ ./$(DEPDIR)/random-system.Plo ./$(DEPDIR)/random.Plo \
+ ./$(DEPDIR)/rndegd.Plo ./$(DEPDIR)/rndgetentropy.Plo \
+ ./$(DEPDIR)/rndhw.Plo ./$(DEPDIR)/rndjent.Plo \
+ ./$(DEPDIR)/rndoldlinux.Plo ./$(DEPDIR)/rndunix.Plo \
+ ./$(DEPDIR)/rndw32.Plo ./$(DEPDIR)/rndw32ce.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(librandom_la_SOURCES) $(EXTRA_librandom_la_SOURCES)
+DIST_SOURCES = $(librandom_la_SOURCES) $(EXTRA_librandom_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Need to include ../src in addition to top_srcdir because gcrypt.h is
+# a built header.
+AM_CPPFLAGS = -I../src -I$(top_srcdir)/src
+AM_CFLAGS = $(GPG_ERROR_CFLAGS)
+noinst_LTLIBRARIES = librandom.la
+GCRYPT_MODULES = @GCRYPT_RANDOM@
+librandom_la_DEPENDENCIES = $(GCRYPT_MODULES)
+librandom_la_LIBADD = $(GCRYPT_MODULES)
+librandom_la_SOURCES = \
+random.c random.h \
+rand-internal.h \
+random-csprng.c \
+random-drbg.c \
+random-system.c \
+rndjent.c \
+rndhw.c
+
+EXTRA_librandom_la_SOURCES = \
+rndgetentropy.c \
+rndoldlinux.c \
+rndegd.c \
+rndunix.c \
+rndw32.c \
+rndw32ce.c \
+jitterentropy-gcd.c jitterentropy-gcd.h \
+jitterentropy-health.c jitterentropy-health.h \
+jitterentropy-noise.c jitterentropy-noise.h \
+jitterentropy-sha3.c jitterentropy-sha3.h \
+jitterentropy-timer.c jitterentropy-timer.h \
+jitterentropy-base.h \
+jitterentropy-base.c jitterentropy.h jitterentropy-base-user.h
+
+@ENABLE_O_FLAG_MUNGING_FALSE@o_flag_munging = cat
+
+# The rndjent module needs to be compiled without optimization. */
+@ENABLE_O_FLAG_MUNGING_TRUE@o_flag_munging = sed -e 's/-O\([1-9sgz][1-9sgz]*\)/-O0/g' -e 's/-Ofast/-O0/g'
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu random/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu random/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+librandom.la: $(librandom_la_OBJECTS) $(librandom_la_DEPENDENCIES) $(EXTRA_librandom_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(librandom_la_OBJECTS) $(librandom_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-base.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-gcd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-health.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-noise.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-sha3.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jitterentropy-timer.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-csprng.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-drbg.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-system.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndegd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndgetentropy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndhw.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndjent.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndoldlinux.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndunix.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndw32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndw32ce.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/jitterentropy-base.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-gcd.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-health.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-noise.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-sha3.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-timer.Plo
+ -rm -f ./$(DEPDIR)/random-csprng.Plo
+ -rm -f ./$(DEPDIR)/random-drbg.Plo
+ -rm -f ./$(DEPDIR)/random-system.Plo
+ -rm -f ./$(DEPDIR)/random.Plo
+ -rm -f ./$(DEPDIR)/rndegd.Plo
+ -rm -f ./$(DEPDIR)/rndgetentropy.Plo
+ -rm -f ./$(DEPDIR)/rndhw.Plo
+ -rm -f ./$(DEPDIR)/rndjent.Plo
+ -rm -f ./$(DEPDIR)/rndoldlinux.Plo
+ -rm -f ./$(DEPDIR)/rndunix.Plo
+ -rm -f ./$(DEPDIR)/rndw32.Plo
+ -rm -f ./$(DEPDIR)/rndw32ce.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/jitterentropy-base.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-gcd.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-health.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-noise.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-sha3.Plo
+ -rm -f ./$(DEPDIR)/jitterentropy-timer.Plo
+ -rm -f ./$(DEPDIR)/random-csprng.Plo
+ -rm -f ./$(DEPDIR)/random-drbg.Plo
+ -rm -f ./$(DEPDIR)/random-system.Plo
+ -rm -f ./$(DEPDIR)/random.Plo
+ -rm -f ./$(DEPDIR)/rndegd.Plo
+ -rm -f ./$(DEPDIR)/rndgetentropy.Plo
+ -rm -f ./$(DEPDIR)/rndhw.Plo
+ -rm -f ./$(DEPDIR)/rndjent.Plo
+ -rm -f ./$(DEPDIR)/rndoldlinux.Plo
+ -rm -f ./$(DEPDIR)/rndunix.Plo
+ -rm -f ./$(DEPDIR)/rndw32.Plo
+ -rm -f ./$(DEPDIR)/rndw32ce.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+rndjent.o: $(srcdir)/rndjent.c jitterentropy-base-user.h \
+ $(srcdir)/jitterentropy-gcd.c $(srcdir)/jitterentropy-gcd.h \
+ $(srcdir)/jitterentropy-health.c $(srcdir)/jitterentropy-health.h \
+ $(srcdir)/jitterentropy-noise.c $(srcdir)/jitterentropy-noise.h \
+ $(srcdir)/jitterentropy-sha3.c $(srcdir)/jitterentropy-sha3.h \
+ $(srcdir)/jitterentropy-timer.c $(srcdir)/jitterentropy-timer.h \
+ $(srcdir)/jitterentropy-base.c $(srcdir)/jitterentropy.h
+ `echo $(COMPILE) -c $(srcdir)/rndjent.c | $(o_flag_munging) `
+
+rndjent.lo: $(srcdir)/rndjent.c jitterentropy-base-user.h \
+ $(srcdir)/jitterentropy-gcd.c $(srcdir)/jitterentropy-gcd.h \
+ $(srcdir)/jitterentropy-health.c $(srcdir)/jitterentropy-health.h \
+ $(srcdir)/jitterentropy-noise.c $(srcdir)/jitterentropy-noise.h \
+ $(srcdir)/jitterentropy-sha3.c $(srcdir)/jitterentropy-sha3.h \
+ $(srcdir)/jitterentropy-timer.c $(srcdir)/jitterentropy-timer.h \
+ $(srcdir)/jitterentropy-base.c $(srcdir)/jitterentropy.h
+ `echo $(LTCOMPILE) -c $(srcdir)/rndjent.c | $(o_flag_munging) `
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
static inline long jent_ncpu(void)
{
-#ifdef _POSIX_SOURCE
+#if defined(_POSIX_SOURCE)
long ncpu = sysconf(_SC_NPROCESSORS_ONLN);
if (ncpu == -1)
return -EFAULT;
return ncpu;
+#elif defined(HAVE_W32_SYSTEM)
+ SYSTEM_INFO sysinfo;
+ long ncpu;
+
+ GetNativeSystemInfo (&sysinfo);
+ ncpu = sysinfo.dwNumberOfProcessors;
+ if (ncpu <= 0) {
+ GetSystemInfo (&sysinfo);
+ ncpu = sysinfo.dwNumberOfProcessors;
+ }
+ if (ncpu <= 0)
+ ncpu = 1;
+ return ncpu;
#else
return 1;
#endif
/* Reset Lag counters */
ec->lag_prediction_success_count = 0;
ec->lag_prediction_success_run = 0;
- ec->lag_best_predictor = 0; //The first guess is basically arbitrary.
+ ec->lag_best_predictor = 0; /*The first guess is basically arbitrary.*/
ec->lag_observations = 0;
for (i = 0; i < JENT_LAG_HISTORY_SIZE; i++) {
{
/* Initialize the base reference */
if (!ec->apt_base_set) {
- ec->apt_base = current_delta; // APT Step 1
- ec->apt_base_set = 1; // APT Step 2
+ ec->apt_base = current_delta; /* APT Step 1 */
+ ec->apt_base_set = 1; /* APT Step 2 */
/*
* Reset APT counter
* Note that we've taken in the first symbol in the window.
*/
- ec->apt_count = 1; // B = 1
+ ec->apt_count = 1; /* B = 1 */
ec->apt_observations = 1;
return;
}
if (current_delta == ec->apt_base) {
- ec->apt_count++; // B = B + 1
+ ec->apt_count++; /* B = B + 1 */
/* Note, ec->apt_count starts with one. */
if (ec->apt_count >= ec->apt_cutoff)
/* Completed one window, the next symbol input will be new apt_base. */
if (ec->apt_observations >= JENT_APT_WINDOW_SIZE)
- jent_apt_reset(ec); // APT Step 4
+ jent_apt_reset(ec); /* APT Step 4 */
}
/***************************************************************************
#define DRBG_HASHSHA1 ((u32)1<<4)
#define DRBG_HASHSHA224 ((u32)1<<5)
#define DRBG_HASHSHA256 ((u32)1<<6)
-#define DRBG_HASHSHA384 ((u32)1<<7)
#define DRBG_HASHSHA512 ((u32)1<<8)
#define DRBG_HASH_MASK (DRBG_HASHSHA1 | DRBG_HASHSHA224 \
- | DRBG_HASHSHA256 | DRBG_HASHSHA384 \
- | DRBG_HASHSHA512)
+ | DRBG_HASHSHA256 | DRBG_HASHSHA512)
/* type modifiers (A.3)*/
#define DRBG_HMAC ((u32)1<<12)
#define DRBG_SYM128 ((u32)1<<13)
#define DRBG_NOPR_CTRAES256 (DRBG_CTRAES | DRBG_SYM256)
#define DRBG_PR_HASHSHA1 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA1)
#define DRBG_PR_HASHSHA256 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA256)
-#define DRBG_PR_HASHSHA384 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA384)
#define DRBG_PR_HASHSHA512 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA512)
#define DRBG_NOPR_HASHSHA1 (DRBG_HASHSHA1)
#define DRBG_NOPR_HASHSHA256 (DRBG_HASHSHA256)
-#define DRBG_NOPR_HASHSHA384 (DRBG_HASHSHA384)
#define DRBG_NOPR_HASHSHA512 (DRBG_HASHSHA512)
#define DRBG_PR_HMACSHA1 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA1 \
| DRBG_HMAC)
#define DRBG_PR_HMACSHA256 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA256 \
| DRBG_HMAC)
-#define DRBG_PR_HMACSHA384 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA384 \
- | DRBG_HMAC)
#define DRBG_PR_HMACSHA512 (DRBG_PREDICTION_RESIST | DRBG_HASHSHA512 \
| DRBG_HMAC)
#define DRBG_NOPR_HMACSHA1 (DRBG_HASHSHA1 | DRBG_HMAC)
#define DRBG_NOPR_HMACSHA256 (DRBG_HASHSHA256 | DRBG_HMAC)
-#define DRBG_NOPR_HMACSHA384 (DRBG_HASHSHA384 | DRBG_HMAC)
#define DRBG_NOPR_HMACSHA512 (DRBG_HASHSHA512 | DRBG_HMAC)
* Global variables
***************************************************************/
+/* The instance of the DRBG, to be refereed by drbg_state. */
+static struct drbg_state_s drbg_instance;
+
/* Global state variable holding the current instance of the DRBG. */
static drbg_state_t drbg_state;
/* Hash DRBGs */
{DRBG_HASHSHA1, 55, 20, GCRY_MD_SHA1},
{DRBG_HASHSHA256, 55, 32, GCRY_MD_SHA256},
- {DRBG_HASHSHA384, 111, 48, GCRY_MD_SHA384},
{DRBG_HASHSHA512, 111, 64, GCRY_MD_SHA512},
/* HMAC DRBGs */
{DRBG_HASHSHA1 | DRBG_HMAC, 20, 20, GCRY_MD_SHA1},
{DRBG_HASHSHA256 | DRBG_HMAC, 32, 32, GCRY_MD_SHA256},
- {DRBG_HASHSHA384 | DRBG_HMAC, 48, 48, GCRY_MD_SHA384},
{DRBG_HASHSHA512 | DRBG_HMAC, 64, 64, GCRY_MD_SHA512},
/* block ciphers */
{DRBG_CTRAES | DRBG_SYM128, 32, 16, GCRY_CIPHER_AES128},
else if (flags & DRBG_SYM192)
return 24;
else if ((flags & DRBG_SYM256) || (flags & DRBG_HASHSHA256) ||
- (flags & DRBG_HASHSHA384) || (flags & DRBG_HASHSHA512))
+ (flags & DRBG_HASHSHA512))
return 32;
else
return 32;
}
else
{
- drbg_state = xtrycalloc_secure (1, sizeof *drbg_state);
- if (!drbg_state)
- return gpg_err_code_from_syserror ();
+ drbg_state = &drbg_instance;
}
if (flags & DRBG_PREDICTION_RESIST)
pr = 1;
if (drbg_state)
{
drbg_uninstantiate (drbg_state);
- xfree (drbg_state);
drbg_state = NULL;
}
drbg_unlock ();
* key, either a re-init or a reseed is sufficient for a fork */
if (drbg_state->seed_init_pid != getpid ())
{
+ /* Update the PID recorded. */
+ drbg_state->seed_init_pid = getpid ();
+
/* We are in a child of us. Perform a reseeding. */
if (drbg_reseed (drbg_state, NULL))
{
* never blocking once the kernel is seeded. */
do
{
- nbytes = length < sizeof (buffer)? length : sizeof (buffer);
_gcry_pre_syscall ();
- ret = getentropy (buffer, nbytes);
+#ifdef GRND_RANDOM
+ if (fips_mode ())
+ {
+ /* DRBG chaining defined in SP 800-90A (rev 1) specify
+ * the upstream (kernel) DRBG needs to be reseeded for
+ * initialization of downstream (libgcrypt) DRBG. For this
+ * in RHEL, we repurposed the GRND_RANDOM flag of getrandom API.
+ * The libgcrypt DRBG is initialized with 48B of entropy, but
+ * the kernel can provide only 32B at a time after reseeding
+ * so we need to limit our requests to 32B here.
+ * This is clarified in IG 7.19 / IG D.K. for FIPS 140-2 / 3
+ * and might not be applicable on other FIPS modules not running
+ * RHEL kernel.
+ */
+ nbytes = length < 32 ? length : 32;
+ ret = getrandom (buffer, nbytes, GRND_RANDOM);
+ }
+ else
+#endif
+ {
+ nbytes = length < sizeof (buffer) ? length : sizeof (buffer);
+ ret = getentropy (buffer, nbytes);
+ }
_gcry_post_syscall ();
}
while (ret == -1 && errno == EINTR);
#endif
#include <unistd.h>
#include <errno.h>
+#ifndef EOPNOTSUPP
+# define EOPNOTSUPP ENOSYS
+#endif
+
+#ifdef HAVE_W32_SYSTEM
+# if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0501
+# undef _WIN32_WINNT
+# define _WIN32_WINNT 0x0501 /* for GetNativeSystemInfo */
+# endif
+# include <windows.h>
+#endif
#include "types.h"
#include "g10lib.h"
misc.c global.c sexp.c hwfeatures.c hwf-common.h \
stdmem.c stdmem.h secmem.c secmem.h \
mpi.h missing-string.c fips.c \
- context.c context.h \
+ context.c context.h const-time.h const-time.c \
ec-context.h
EXTRA_libgcrypt_la_SOURCES = hwf-x86.c hwf-arm.c hwf-ppc.c hwf-s390x.c
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Makefile.am - for gcrypt/src
+# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+# 2006, 2007 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+
+
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = dumpsexp$(EXEEXT) hmac256$(EXEEXT) mpicalc$(EXEEXT) \
+ $(am__EXEEXT_1)
+@ENABLE_RANDOM_DAEMON_TRUE@sbin_PROGRAMS = gcryptrnd$(EXEEXT)
+@ENABLE_RANDOM_DAEMON_TRUE@am__append_1 = getrandom
+@USE_HMAC_BINARY_CHECK_TRUE@am__append_2 = libgcrypt.so.hmac
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = gcrypt.h libgcrypt-config libgcrypt.pc \
+ versioninfo.rc
+CONFIG_CLEAN_VPATH_FILES =
+@ENABLE_RANDOM_DAEMON_TRUE@am__EXEEXT_1 = getrandom$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \
+ "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+ "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)" \
+ "$(DESTDIR)$(includedir)"
+PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS)
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+LTLIBRARIES = $(lib_LTLIBRARIES)
+@HAVE_W32_SYSTEM_TRUE@am__DEPENDENCIES_1 = versioninfo.lo
+am__DEPENDENCIES_2 =
+am_libgcrypt_la_OBJECTS = libgcrypt_la-visibility.lo \
+ libgcrypt_la-misc.lo libgcrypt_la-global.lo \
+ libgcrypt_la-sexp.lo libgcrypt_la-hwfeatures.lo \
+ libgcrypt_la-stdmem.lo libgcrypt_la-secmem.lo \
+ libgcrypt_la-missing-string.lo libgcrypt_la-fips.lo \
+ libgcrypt_la-context.lo libgcrypt_la-const-time.lo
+libgcrypt_la_OBJECTS = $(am_libgcrypt_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libgcrypt_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libgcrypt_la_CFLAGS) \
+ $(CFLAGS) $(libgcrypt_la_LDFLAGS) $(LDFLAGS) -o $@
+am_dumpsexp_OBJECTS = dumpsexp-dumpsexp.$(OBJEXT)
+dumpsexp_OBJECTS = $(am_dumpsexp_OBJECTS)
+@HAVE_W32CE_SYSTEM_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2)
+dumpsexp_DEPENDENCIES = $(am__DEPENDENCIES_3)
+dumpsexp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dumpsexp_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__gcryptrnd_SOURCES_DIST = gcryptrnd.c
+@ENABLE_RANDOM_DAEMON_TRUE@am_gcryptrnd_OBJECTS = \
+@ENABLE_RANDOM_DAEMON_TRUE@ gcryptrnd-gcryptrnd.$(OBJEXT)
+gcryptrnd_OBJECTS = $(am_gcryptrnd_OBJECTS)
+@ENABLE_RANDOM_DAEMON_TRUE@gcryptrnd_DEPENDENCIES = libgcrypt.la \
+@ENABLE_RANDOM_DAEMON_TRUE@ $(am__DEPENDENCIES_2) \
+@ENABLE_RANDOM_DAEMON_TRUE@ $(am__DEPENDENCIES_2)
+gcryptrnd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gcryptrnd_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__getrandom_SOURCES_DIST = getrandom.c
+@ENABLE_RANDOM_DAEMON_TRUE@am_getrandom_OBJECTS = getrandom.$(OBJEXT)
+getrandom_OBJECTS = $(am_getrandom_OBJECTS)
+getrandom_LDADD = $(LDADD)
+am_hmac256_OBJECTS = hmac256-hmac256.$(OBJEXT)
+hmac256_OBJECTS = $(am_hmac256_OBJECTS)
+hmac256_DEPENDENCIES = $(am__DEPENDENCIES_3)
+hmac256_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(hmac256_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_mpicalc_OBJECTS = mpicalc-mpicalc.$(OBJEXT)
+mpicalc_OBJECTS = $(am_mpicalc_OBJECTS)
+mpicalc_DEPENDENCIES = libgcrypt.la $(am__DEPENDENCIES_2)
+mpicalc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mpicalc_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SCRIPTS = $(bin_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/dumpsexp-dumpsexp.Po \
+ ./$(DEPDIR)/gcryptrnd-gcryptrnd.Po ./$(DEPDIR)/getrandom.Po \
+ ./$(DEPDIR)/hmac256-hmac256.Po \
+ ./$(DEPDIR)/libgcrypt_la-const-time.Plo \
+ ./$(DEPDIR)/libgcrypt_la-context.Plo \
+ ./$(DEPDIR)/libgcrypt_la-fips.Plo \
+ ./$(DEPDIR)/libgcrypt_la-global.Plo \
+ ./$(DEPDIR)/libgcrypt_la-hwf-arm.Plo \
+ ./$(DEPDIR)/libgcrypt_la-hwf-ppc.Plo \
+ ./$(DEPDIR)/libgcrypt_la-hwf-s390x.Plo \
+ ./$(DEPDIR)/libgcrypt_la-hwf-x86.Plo \
+ ./$(DEPDIR)/libgcrypt_la-hwfeatures.Plo \
+ ./$(DEPDIR)/libgcrypt_la-misc.Plo \
+ ./$(DEPDIR)/libgcrypt_la-missing-string.Plo \
+ ./$(DEPDIR)/libgcrypt_la-secmem.Plo \
+ ./$(DEPDIR)/libgcrypt_la-sexp.Plo \
+ ./$(DEPDIR)/libgcrypt_la-stdmem.Plo \
+ ./$(DEPDIR)/libgcrypt_la-visibility.Plo \
+ ./$(DEPDIR)/mpicalc-mpicalc.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libgcrypt_la_SOURCES) $(EXTRA_libgcrypt_la_SOURCES) \
+ $(dumpsexp_SOURCES) $(gcryptrnd_SOURCES) $(getrandom_SOURCES) \
+ $(hmac256_SOURCES) $(mpicalc_SOURCES)
+DIST_SOURCES = $(libgcrypt_la_SOURCES) $(EXTRA_libgcrypt_la_SOURCES) \
+ $(dumpsexp_SOURCES) $(am__gcryptrnd_SOURCES_DIST) \
+ $(am__getrandom_SOURCES_DIST) $(hmac256_SOURCES) \
+ $(mpicalc_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(m4data_DATA) $(pkgconfig_DATA)
+HEADERS = $(nodist_include_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/gcrypt.h.in \
+ $(srcdir)/libgcrypt-config.in $(srcdir)/libgcrypt.pc.in \
+ $(srcdir)/versioninfo.rc.in $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libgcrypt.pc
+EXTRA_DIST = libgcrypt-config.in libgcrypt.m4 libgcrypt.vers \
+ gcrypt.h.in libgcrypt.def libgcrypt.pc.in gen-note-integrity.sh
+
+bin_SCRIPTS = libgcrypt-config
+m4datadir = $(datadir)/aclocal
+m4data_DATA = libgcrypt.m4
+nodist_include_HEADERS = gcrypt.h
+lib_LTLIBRARIES = libgcrypt.la
+@HAVE_W32CE_SYSTEM_FALSE@arch_gpg_error_cflags =
+
+# Depending on the architecture some targets require libgpg-error.
+@HAVE_W32CE_SYSTEM_TRUE@arch_gpg_error_cflags = $(GPG_ERROR_CFLAGS)
+@HAVE_W32CE_SYSTEM_FALSE@arch_gpg_error_libs =
+@HAVE_W32CE_SYSTEM_TRUE@arch_gpg_error_libs = $(GPG_ERROR_LIBS)
+AM_CFLAGS = $(GPG_ERROR_CFLAGS)
+AM_CCASFLAGS = $(NOEXECSTACK_FLAGS)
+@HAVE_LD_VERSION_SCRIPT_FALSE@libgcrypt_version_script_cmd =
+@HAVE_LD_VERSION_SCRIPT_TRUE@libgcrypt_version_script_cmd = -Wl,--version-script=$(srcdir)/libgcrypt.vers
+libgcrypt_la_CFLAGS = $(GPG_ERROR_CFLAGS) @DEF_HMAC_BINARY_CHECK@
+libgcrypt_la_SOURCES = \
+ gcrypt-int.h g10lib.h visibility.c visibility.h types.h \
+ gcrypt-testapi.h cipher.h cipher-proto.h \
+ misc.c global.c sexp.c hwfeatures.c hwf-common.h \
+ stdmem.c stdmem.h secmem.c secmem.h \
+ mpi.h missing-string.c fips.c \
+ context.c context.h const-time.h const-time.c \
+ ec-context.h
+
+EXTRA_libgcrypt_la_SOURCES = hwf-x86.c hwf-arm.c hwf-ppc.c hwf-s390x.c
+gcrypt_hwf_modules = @GCRYPT_HWF_MODULES@
+@HAVE_W32_SYSTEM_TRUE@RCCOMPILE = $(RC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+@HAVE_W32_SYSTEM_TRUE@ $(libgcrypt_la_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS)
+
+@HAVE_W32_SYSTEM_TRUE@LTRCCOMPILE = $(LIBTOOL) --mode=compile --tag=RC $(RCCOMPILE)
+@HAVE_W32_SYSTEM_TRUE@SUFFIXES = .rc .lo
+@HAVE_W32_SYSTEM_FALSE@gcrypt_res =
+@HAVE_W32_SYSTEM_TRUE@gcrypt_res = versioninfo.lo
+@HAVE_W32_SYSTEM_FALSE@no_undefined =
+@HAVE_W32_SYSTEM_TRUE@no_undefined = -no-undefined
+@HAVE_W32_SYSTEM_FALSE@export_symbols =
+@HAVE_W32_SYSTEM_TRUE@export_symbols = -export-symbols $(srcdir)/libgcrypt.def
+@HAVE_W32_SYSTEM_FALSE@extra_ltoptions =
+@HAVE_W32_SYSTEM_TRUE@extra_ltoptions = -XCClinker -static-libgcc
+@HAVE_W32_SYSTEM_FALSE@gcrypt_deps =
+@HAVE_W32_SYSTEM_TRUE@gcrypt_deps = $(gcrypt_res) libgcrypt.def
+@HAVE_W32_SYSTEM_FALSE@gcrypt_res_ldflag =
+libgcrypt_la_LDFLAGS = $(no_undefined) $(export_symbols) $(extra_ltoptions) \
+ $(libgcrypt_version_script_cmd) -version-info \
+ @LIBGCRYPT_LT_CURRENT@:@LIBGCRYPT_LT_REVISION@:@LIBGCRYPT_LT_AGE@
+
+libgcrypt_la_DEPENDENCIES = \
+ $(gcrypt_hwf_modules) \
+ ../cipher/libcipher.la \
+ ../random/librandom.la \
+ ../mpi/libmpi.la \
+ ../compat/libcompat.la \
+ $(srcdir)/libgcrypt.vers $(gcrypt_deps)
+
+libgcrypt_la_LIBADD = $(gcrypt_res) \
+ $(gcrypt_hwf_modules) \
+ ../cipher/libcipher.la \
+ ../random/librandom.la \
+ ../mpi/libmpi.la \
+ ../compat/libcompat.la $(DL_LIBS) $(GPG_ERROR_LIBS)
+
+dumpsexp_SOURCES = dumpsexp.c
+dumpsexp_CFLAGS = $(arch_gpg_error_cflags)
+dumpsexp_LDADD = $(arch_gpg_error_libs)
+mpicalc_SOURCES = mpicalc.c
+mpicalc_CFLAGS = $(GPG_ERROR_CFLAGS)
+mpicalc_LDADD = libgcrypt.la $(GPG_ERROR_LIBS)
+EXTRA_mpicalc_DEPENDENCIES = libgcrypt.la.done
+hmac256_SOURCES = hmac256.c hmac256.h
+hmac256_CFLAGS = -DSTANDALONE @DEF_HMAC_BINARY_CHECK@ \
+ $(arch_gpg_error_cflags)
+
+hmac256_LDADD = $(arch_gpg_error_libs)
+@ENABLE_RANDOM_DAEMON_TRUE@gcryptrnd_SOURCES = gcryptrnd.c
+@ENABLE_RANDOM_DAEMON_TRUE@gcryptrnd_CFLAGS = $(GPG_ERROR_CFLAGS) $(PTH_CFLAGS)
+@ENABLE_RANDOM_DAEMON_TRUE@gcryptrnd_LDADD = libgcrypt.la $(GPG_ERROR_LIBS) $(PTH_LIBS)
+@ENABLE_RANDOM_DAEMON_TRUE@getrandom_SOURCES = getrandom.c
+CLEANFILES = libgcrypt.la.done $(am__append_2)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .rc .lo .c .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+gcrypt.h: $(top_builddir)/config.status $(srcdir)/gcrypt.h.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+libgcrypt-config: $(top_builddir)/config.status $(srcdir)/libgcrypt-config.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+libgcrypt.pc: $(top_builddir)/config.status $(srcdir)/libgcrypt.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+versioninfo.rc: $(top_builddir)/config.status $(srcdir)/versioninfo.rc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files
+
+clean-sbinPROGRAMS:
+ @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libgcrypt.la: $(libgcrypt_la_OBJECTS) $(libgcrypt_la_DEPENDENCIES) $(EXTRA_libgcrypt_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgcrypt_la_LINK) -rpath $(libdir) $(libgcrypt_la_OBJECTS) $(libgcrypt_la_LIBADD) $(LIBS)
+
+dumpsexp$(EXEEXT): $(dumpsexp_OBJECTS) $(dumpsexp_DEPENDENCIES) $(EXTRA_dumpsexp_DEPENDENCIES)
+ @rm -f dumpsexp$(EXEEXT)
+ $(AM_V_CCLD)$(dumpsexp_LINK) $(dumpsexp_OBJECTS) $(dumpsexp_LDADD) $(LIBS)
+
+gcryptrnd$(EXEEXT): $(gcryptrnd_OBJECTS) $(gcryptrnd_DEPENDENCIES) $(EXTRA_gcryptrnd_DEPENDENCIES)
+ @rm -f gcryptrnd$(EXEEXT)
+ $(AM_V_CCLD)$(gcryptrnd_LINK) $(gcryptrnd_OBJECTS) $(gcryptrnd_LDADD) $(LIBS)
+
+getrandom$(EXEEXT): $(getrandom_OBJECTS) $(getrandom_DEPENDENCIES) $(EXTRA_getrandom_DEPENDENCIES)
+ @rm -f getrandom$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(getrandom_OBJECTS) $(getrandom_LDADD) $(LIBS)
+
+hmac256$(EXEEXT): $(hmac256_OBJECTS) $(hmac256_DEPENDENCIES) $(EXTRA_hmac256_DEPENDENCIES)
+ @rm -f hmac256$(EXEEXT)
+ $(AM_V_CCLD)$(hmac256_LINK) $(hmac256_OBJECTS) $(hmac256_LDADD) $(LIBS)
+
+mpicalc$(EXEEXT): $(mpicalc_OBJECTS) $(mpicalc_DEPENDENCIES) $(EXTRA_mpicalc_DEPENDENCIES)
+ @rm -f mpicalc$(EXEEXT)
+ $(AM_V_CCLD)$(mpicalc_LINK) $(mpicalc_OBJECTS) $(mpicalc_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dumpsexp-dumpsexp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gcryptrnd-gcryptrnd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getrandom.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac256-hmac256.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-const-time.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-context.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-fips.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-global.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-hwf-arm.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-hwf-ppc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-hwf-s390x.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-hwf-x86.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-hwfeatures.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-misc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-missing-string.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-secmem.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-sexp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-stdmem.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgcrypt_la-visibility.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpicalc-mpicalc.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgcrypt_la-visibility.lo: visibility.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-visibility.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-visibility.Tpo -c -o libgcrypt_la-visibility.lo `test -f 'visibility.c' || echo '$(srcdir)/'`visibility.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-visibility.Tpo $(DEPDIR)/libgcrypt_la-visibility.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='visibility.c' object='libgcrypt_la-visibility.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-visibility.lo `test -f 'visibility.c' || echo '$(srcdir)/'`visibility.c
+
+libgcrypt_la-misc.lo: misc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-misc.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-misc.Tpo -c -o libgcrypt_la-misc.lo `test -f 'misc.c' || echo '$(srcdir)/'`misc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-misc.Tpo $(DEPDIR)/libgcrypt_la-misc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='misc.c' object='libgcrypt_la-misc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-misc.lo `test -f 'misc.c' || echo '$(srcdir)/'`misc.c
+
+libgcrypt_la-global.lo: global.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-global.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-global.Tpo -c -o libgcrypt_la-global.lo `test -f 'global.c' || echo '$(srcdir)/'`global.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-global.Tpo $(DEPDIR)/libgcrypt_la-global.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='global.c' object='libgcrypt_la-global.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-global.lo `test -f 'global.c' || echo '$(srcdir)/'`global.c
+
+libgcrypt_la-sexp.lo: sexp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-sexp.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-sexp.Tpo -c -o libgcrypt_la-sexp.lo `test -f 'sexp.c' || echo '$(srcdir)/'`sexp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-sexp.Tpo $(DEPDIR)/libgcrypt_la-sexp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sexp.c' object='libgcrypt_la-sexp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-sexp.lo `test -f 'sexp.c' || echo '$(srcdir)/'`sexp.c
+
+libgcrypt_la-hwfeatures.lo: hwfeatures.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-hwfeatures.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-hwfeatures.Tpo -c -o libgcrypt_la-hwfeatures.lo `test -f 'hwfeatures.c' || echo '$(srcdir)/'`hwfeatures.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-hwfeatures.Tpo $(DEPDIR)/libgcrypt_la-hwfeatures.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwfeatures.c' object='libgcrypt_la-hwfeatures.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-hwfeatures.lo `test -f 'hwfeatures.c' || echo '$(srcdir)/'`hwfeatures.c
+
+libgcrypt_la-stdmem.lo: stdmem.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-stdmem.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-stdmem.Tpo -c -o libgcrypt_la-stdmem.lo `test -f 'stdmem.c' || echo '$(srcdir)/'`stdmem.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-stdmem.Tpo $(DEPDIR)/libgcrypt_la-stdmem.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdmem.c' object='libgcrypt_la-stdmem.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-stdmem.lo `test -f 'stdmem.c' || echo '$(srcdir)/'`stdmem.c
+
+libgcrypt_la-secmem.lo: secmem.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-secmem.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-secmem.Tpo -c -o libgcrypt_la-secmem.lo `test -f 'secmem.c' || echo '$(srcdir)/'`secmem.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-secmem.Tpo $(DEPDIR)/libgcrypt_la-secmem.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='secmem.c' object='libgcrypt_la-secmem.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-secmem.lo `test -f 'secmem.c' || echo '$(srcdir)/'`secmem.c
+
+libgcrypt_la-missing-string.lo: missing-string.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-missing-string.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-missing-string.Tpo -c -o libgcrypt_la-missing-string.lo `test -f 'missing-string.c' || echo '$(srcdir)/'`missing-string.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-missing-string.Tpo $(DEPDIR)/libgcrypt_la-missing-string.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='missing-string.c' object='libgcrypt_la-missing-string.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-missing-string.lo `test -f 'missing-string.c' || echo '$(srcdir)/'`missing-string.c
+
+libgcrypt_la-fips.lo: fips.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-fips.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-fips.Tpo -c -o libgcrypt_la-fips.lo `test -f 'fips.c' || echo '$(srcdir)/'`fips.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-fips.Tpo $(DEPDIR)/libgcrypt_la-fips.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fips.c' object='libgcrypt_la-fips.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-fips.lo `test -f 'fips.c' || echo '$(srcdir)/'`fips.c
+
+libgcrypt_la-context.lo: context.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-context.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-context.Tpo -c -o libgcrypt_la-context.lo `test -f 'context.c' || echo '$(srcdir)/'`context.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-context.Tpo $(DEPDIR)/libgcrypt_la-context.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='context.c' object='libgcrypt_la-context.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-context.lo `test -f 'context.c' || echo '$(srcdir)/'`context.c
+
+libgcrypt_la-const-time.lo: const-time.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-const-time.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-const-time.Tpo -c -o libgcrypt_la-const-time.lo `test -f 'const-time.c' || echo '$(srcdir)/'`const-time.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-const-time.Tpo $(DEPDIR)/libgcrypt_la-const-time.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='const-time.c' object='libgcrypt_la-const-time.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-const-time.lo `test -f 'const-time.c' || echo '$(srcdir)/'`const-time.c
+
+libgcrypt_la-hwf-x86.lo: hwf-x86.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-hwf-x86.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-hwf-x86.Tpo -c -o libgcrypt_la-hwf-x86.lo `test -f 'hwf-x86.c' || echo '$(srcdir)/'`hwf-x86.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-hwf-x86.Tpo $(DEPDIR)/libgcrypt_la-hwf-x86.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwf-x86.c' object='libgcrypt_la-hwf-x86.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-hwf-x86.lo `test -f 'hwf-x86.c' || echo '$(srcdir)/'`hwf-x86.c
+
+libgcrypt_la-hwf-arm.lo: hwf-arm.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-hwf-arm.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-hwf-arm.Tpo -c -o libgcrypt_la-hwf-arm.lo `test -f 'hwf-arm.c' || echo '$(srcdir)/'`hwf-arm.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-hwf-arm.Tpo $(DEPDIR)/libgcrypt_la-hwf-arm.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwf-arm.c' object='libgcrypt_la-hwf-arm.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-hwf-arm.lo `test -f 'hwf-arm.c' || echo '$(srcdir)/'`hwf-arm.c
+
+libgcrypt_la-hwf-ppc.lo: hwf-ppc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-hwf-ppc.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-hwf-ppc.Tpo -c -o libgcrypt_la-hwf-ppc.lo `test -f 'hwf-ppc.c' || echo '$(srcdir)/'`hwf-ppc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-hwf-ppc.Tpo $(DEPDIR)/libgcrypt_la-hwf-ppc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwf-ppc.c' object='libgcrypt_la-hwf-ppc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-hwf-ppc.lo `test -f 'hwf-ppc.c' || echo '$(srcdir)/'`hwf-ppc.c
+
+libgcrypt_la-hwf-s390x.lo: hwf-s390x.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -MT libgcrypt_la-hwf-s390x.lo -MD -MP -MF $(DEPDIR)/libgcrypt_la-hwf-s390x.Tpo -c -o libgcrypt_la-hwf-s390x.lo `test -f 'hwf-s390x.c' || echo '$(srcdir)/'`hwf-s390x.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgcrypt_la-hwf-s390x.Tpo $(DEPDIR)/libgcrypt_la-hwf-s390x.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hwf-s390x.c' object='libgcrypt_la-hwf-s390x.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgcrypt_la_CFLAGS) $(CFLAGS) -c -o libgcrypt_la-hwf-s390x.lo `test -f 'hwf-s390x.c' || echo '$(srcdir)/'`hwf-s390x.c
+
+dumpsexp-dumpsexp.o: dumpsexp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dumpsexp_CFLAGS) $(CFLAGS) -MT dumpsexp-dumpsexp.o -MD -MP -MF $(DEPDIR)/dumpsexp-dumpsexp.Tpo -c -o dumpsexp-dumpsexp.o `test -f 'dumpsexp.c' || echo '$(srcdir)/'`dumpsexp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dumpsexp-dumpsexp.Tpo $(DEPDIR)/dumpsexp-dumpsexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dumpsexp.c' object='dumpsexp-dumpsexp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dumpsexp_CFLAGS) $(CFLAGS) -c -o dumpsexp-dumpsexp.o `test -f 'dumpsexp.c' || echo '$(srcdir)/'`dumpsexp.c
+
+dumpsexp-dumpsexp.obj: dumpsexp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dumpsexp_CFLAGS) $(CFLAGS) -MT dumpsexp-dumpsexp.obj -MD -MP -MF $(DEPDIR)/dumpsexp-dumpsexp.Tpo -c -o dumpsexp-dumpsexp.obj `if test -f 'dumpsexp.c'; then $(CYGPATH_W) 'dumpsexp.c'; else $(CYGPATH_W) '$(srcdir)/dumpsexp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dumpsexp-dumpsexp.Tpo $(DEPDIR)/dumpsexp-dumpsexp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dumpsexp.c' object='dumpsexp-dumpsexp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dumpsexp_CFLAGS) $(CFLAGS) -c -o dumpsexp-dumpsexp.obj `if test -f 'dumpsexp.c'; then $(CYGPATH_W) 'dumpsexp.c'; else $(CYGPATH_W) '$(srcdir)/dumpsexp.c'; fi`
+
+gcryptrnd-gcryptrnd.o: gcryptrnd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gcryptrnd_CFLAGS) $(CFLAGS) -MT gcryptrnd-gcryptrnd.o -MD -MP -MF $(DEPDIR)/gcryptrnd-gcryptrnd.Tpo -c -o gcryptrnd-gcryptrnd.o `test -f 'gcryptrnd.c' || echo '$(srcdir)/'`gcryptrnd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gcryptrnd-gcryptrnd.Tpo $(DEPDIR)/gcryptrnd-gcryptrnd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gcryptrnd.c' object='gcryptrnd-gcryptrnd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gcryptrnd_CFLAGS) $(CFLAGS) -c -o gcryptrnd-gcryptrnd.o `test -f 'gcryptrnd.c' || echo '$(srcdir)/'`gcryptrnd.c
+
+gcryptrnd-gcryptrnd.obj: gcryptrnd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gcryptrnd_CFLAGS) $(CFLAGS) -MT gcryptrnd-gcryptrnd.obj -MD -MP -MF $(DEPDIR)/gcryptrnd-gcryptrnd.Tpo -c -o gcryptrnd-gcryptrnd.obj `if test -f 'gcryptrnd.c'; then $(CYGPATH_W) 'gcryptrnd.c'; else $(CYGPATH_W) '$(srcdir)/gcryptrnd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gcryptrnd-gcryptrnd.Tpo $(DEPDIR)/gcryptrnd-gcryptrnd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gcryptrnd.c' object='gcryptrnd-gcryptrnd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gcryptrnd_CFLAGS) $(CFLAGS) -c -o gcryptrnd-gcryptrnd.obj `if test -f 'gcryptrnd.c'; then $(CYGPATH_W) 'gcryptrnd.c'; else $(CYGPATH_W) '$(srcdir)/gcryptrnd.c'; fi`
+
+hmac256-hmac256.o: hmac256.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hmac256_CFLAGS) $(CFLAGS) -MT hmac256-hmac256.o -MD -MP -MF $(DEPDIR)/hmac256-hmac256.Tpo -c -o hmac256-hmac256.o `test -f 'hmac256.c' || echo '$(srcdir)/'`hmac256.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hmac256-hmac256.Tpo $(DEPDIR)/hmac256-hmac256.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hmac256.c' object='hmac256-hmac256.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hmac256_CFLAGS) $(CFLAGS) -c -o hmac256-hmac256.o `test -f 'hmac256.c' || echo '$(srcdir)/'`hmac256.c
+
+hmac256-hmac256.obj: hmac256.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hmac256_CFLAGS) $(CFLAGS) -MT hmac256-hmac256.obj -MD -MP -MF $(DEPDIR)/hmac256-hmac256.Tpo -c -o hmac256-hmac256.obj `if test -f 'hmac256.c'; then $(CYGPATH_W) 'hmac256.c'; else $(CYGPATH_W) '$(srcdir)/hmac256.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hmac256-hmac256.Tpo $(DEPDIR)/hmac256-hmac256.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hmac256.c' object='hmac256-hmac256.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hmac256_CFLAGS) $(CFLAGS) -c -o hmac256-hmac256.obj `if test -f 'hmac256.c'; then $(CYGPATH_W) 'hmac256.c'; else $(CYGPATH_W) '$(srcdir)/hmac256.c'; fi`
+
+mpicalc-mpicalc.o: mpicalc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpicalc_CFLAGS) $(CFLAGS) -MT mpicalc-mpicalc.o -MD -MP -MF $(DEPDIR)/mpicalc-mpicalc.Tpo -c -o mpicalc-mpicalc.o `test -f 'mpicalc.c' || echo '$(srcdir)/'`mpicalc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpicalc-mpicalc.Tpo $(DEPDIR)/mpicalc-mpicalc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpicalc.c' object='mpicalc-mpicalc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpicalc_CFLAGS) $(CFLAGS) -c -o mpicalc-mpicalc.o `test -f 'mpicalc.c' || echo '$(srcdir)/'`mpicalc.c
+
+mpicalc-mpicalc.obj: mpicalc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpicalc_CFLAGS) $(CFLAGS) -MT mpicalc-mpicalc.obj -MD -MP -MF $(DEPDIR)/mpicalc-mpicalc.Tpo -c -o mpicalc-mpicalc.obj `if test -f 'mpicalc.c'; then $(CYGPATH_W) 'mpicalc.c'; else $(CYGPATH_W) '$(srcdir)/mpicalc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mpicalc-mpicalc.Tpo $(DEPDIR)/mpicalc-mpicalc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mpicalc.c' object='mpicalc-mpicalc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mpicalc_CFLAGS) $(CFLAGS) -c -o mpicalc-mpicalc.obj `if test -f 'mpicalc.c'; then $(CYGPATH_W) 'mpicalc.c'; else $(CYGPATH_W) '$(srcdir)/mpicalc.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-m4dataDATA: $(m4data_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(m4datadir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(m4datadir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4datadir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4datadir)" || exit $$?; \
+ done
+
+uninstall-m4dataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir)
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+install-nodist_includeHEADERS: $(nodist_include_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+ done
+
+uninstall-nodist_includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(DATA) \
+ $(HEADERS)
+install-binPROGRAMS: install-libLTLIBRARIES
+
+install-sbinPROGRAMS: install-libLTLIBRARIES
+
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/dumpsexp-dumpsexp.Po
+ -rm -f ./$(DEPDIR)/gcryptrnd-gcryptrnd.Po
+ -rm -f ./$(DEPDIR)/getrandom.Po
+ -rm -f ./$(DEPDIR)/hmac256-hmac256.Po
+ -rm -f ./$(DEPDIR)/libgcrypt_la-const-time.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-context.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-fips.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-global.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-arm.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-ppc.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-s390x.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-x86.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwfeatures.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-misc.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-missing-string.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-secmem.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-sexp.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-stdmem.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-visibility.Plo
+ -rm -f ./$(DEPDIR)/mpicalc-mpicalc.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-m4dataDATA \
+ install-nodist_includeHEADERS install-pkgconfigDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS \
+ install-libLTLIBRARIES install-sbinPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/dumpsexp-dumpsexp.Po
+ -rm -f ./$(DEPDIR)/gcryptrnd-gcryptrnd.Po
+ -rm -f ./$(DEPDIR)/getrandom.Po
+ -rm -f ./$(DEPDIR)/hmac256-hmac256.Po
+ -rm -f ./$(DEPDIR)/libgcrypt_la-const-time.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-context.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-fips.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-global.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-arm.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-ppc.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-s390x.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwf-x86.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-hwfeatures.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-misc.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-missing-string.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-secmem.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-sexp.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-stdmem.Plo
+ -rm -f ./$(DEPDIR)/libgcrypt_la-visibility.Plo
+ -rm -f ./$(DEPDIR)/mpicalc-mpicalc.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
+ uninstall-libLTLIBRARIES uninstall-local uninstall-m4dataDATA \
+ uninstall-nodist_includeHEADERS uninstall-pkgconfigDATA \
+ uninstall-sbinPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+ clean-libtool clean-sbinPROGRAMS cscopelist-am ctags ctags-am \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-binSCRIPTS install-data install-data-am \
+ install-data-local install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-libLTLIBRARIES install-m4dataDATA \
+ install-man install-nodist_includeHEADERS install-pdf \
+ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \
+ install-sbinPROGRAMS install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-binSCRIPTS uninstall-libLTLIBRARIES uninstall-local \
+ uninstall-m4dataDATA uninstall-nodist_includeHEADERS \
+ uninstall-pkgconfigDATA uninstall-sbinPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+@HAVE_W32_SYSTEM_TRUE@.rc.lo:
+@HAVE_W32_SYSTEM_TRUE@ $(LTRCCOMPILE) -i "$<" -o "$@"
+
+@HAVE_W32_SYSTEM_TRUE@install-def-file:
+@HAVE_W32_SYSTEM_TRUE@ -$(INSTALL) -d $(DESTDIR)$(libdir)
+@HAVE_W32_SYSTEM_TRUE@ $(INSTALL) $(srcdir)/libgcrypt.def $(DESTDIR)$(libdir)/libgcrypt.def
+
+@HAVE_W32_SYSTEM_TRUE@uninstall-def-file:
+@HAVE_W32_SYSTEM_TRUE@ -rm $(DESTDIR)$(libdir)/libgcrypt.def
+@HAVE_W32_SYSTEM_FALSE@install-def-file:
+@HAVE_W32_SYSTEM_FALSE@uninstall-def-file:
+
+@USE_HMAC_BINARY_CHECK_TRUE@libgcrypt.la.done: libgcrypt.so.hmac
+@USE_HMAC_BINARY_CHECK_TRUE@ $(OBJCOPY) --add-section .note.fdo.integrity=libgcrypt.so.hmac \
+@USE_HMAC_BINARY_CHECK_TRUE@ --set-section-flags .note.fdo.integrity=noload,readonly \
+@USE_HMAC_BINARY_CHECK_TRUE@ .libs/libgcrypt.so .libs/libgcrypt.so.new
+@USE_HMAC_BINARY_CHECK_TRUE@ mv -f .libs/libgcrypt.so.new .libs/libgcrypt.so.*.*
+@USE_HMAC_BINARY_CHECK_TRUE@ @touch libgcrypt.la.done
+
+@USE_HMAC_BINARY_CHECK_TRUE@libgcrypt.so.hmac: hmac256 libgcrypt.la
+@USE_HMAC_BINARY_CHECK_TRUE@ ECHO_N=$(ECHO_N) READELF=$(READELF) AWK=$(AWK) \
+@USE_HMAC_BINARY_CHECK_TRUE@ $(srcdir)/gen-note-integrity.sh > $@
+@USE_HMAC_BINARY_CHECK_FALSE@libgcrypt.la.done: libgcrypt.la
+@USE_HMAC_BINARY_CHECK_FALSE@ @touch libgcrypt.la.done
+
+install-data-local: install-def-file
+
+uninstall-local: uninstall-def-file
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+/* const-time.c - Constant-time functions
+ * Copyright (C) 2023 g10 Code GmbH
+ *
+ * This file is part of Libgcrypt.
+ *
+ * Libgcrypt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * Libgcrypt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "g10lib.h"
+#include "const-time.h"
+
+
+#ifndef HAVE_GCC_ASM_VOLATILE_MEMORY
+/* These variables are used to generate masks from conditional operation
+ * flag parameters. Use of volatile prevents compiler optimizations from
+ * converting AND-masking to conditional branches. */
+volatile unsigned int _gcry_ct_vzero = 0;
+volatile unsigned int _gcry_ct_vone = 1;
+#endif
+
+
+/*
+ * Compare byte arrays of length LEN, return 1 if it's not same,
+ * 0, otherwise.
+ */
+unsigned int
+_gcry_ct_not_memequal (const void *b1, const void *b2, size_t len)
+{
+ const byte *a = b1;
+ const byte *b = b2;
+ int ab, ba;
+ size_t i;
+
+ /* Constant-time compare. */
+ for (i = 0, ab = 0, ba = 0; i < len; i++)
+ {
+ /* If a[i] != b[i], either ab or ba will be negative. */
+ ab |= a[i] - b[i];
+ ba |= b[i] - a[i];
+ }
+
+ /* 'ab | ba' is negative when buffers are not equal, extract sign bit. */
+ return ((unsigned int)(ab | ba) >> (sizeof(unsigned int) * 8 - 1)) & 1;
+}
+
+/*
+ * Compare byte arrays of length LEN, return 0 if it's not same,
+ * 1, otherwise.
+ */
+unsigned int
+_gcry_ct_memequal (const void *b1, const void *b2, size_t len)
+{
+ return _gcry_ct_not_memequal (b1, b2, len) ^ 1;
+}
+
+/*
+ * Copy LEN bytes from memory area SRC to memory area DST, when
+ * OP_ENABLED=1. When DST <= SRC, the memory areas may overlap. When
+ * DST > SRC, the memory areas must not overlap.
+ */
+void
+_gcry_ct_memmov_cond (void *dst, const void *src, size_t len,
+ unsigned long op_enable)
+{
+ /* Note: dual mask with AND/OR used for EM leakage mitigation */
+ unsigned char mask1 = ct_ulong_gen_mask(op_enable);
+ unsigned char mask2 = ct_ulong_gen_inv_mask(op_enable);
+ unsigned char *b_dst = dst;
+ const unsigned char *b_src = src;
+ size_t i;
+
+ for (i = 0; i < len; i++)
+ b_dst[i] = (b_dst[i] & mask2) | (b_src[i] & mask1);
+}
--- /dev/null
+/* const-time.h - Constant-time functions
+ * Copyright (C) 2023 g10 Code GmbH
+ *
+ * This file is part of Libgcrypt.
+ *
+ * Libgcrypt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * Libgcrypt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef GCRY_CONST_TIME_H
+#define GCRY_CONST_TIME_H
+
+#include "types.h"
+
+
+#define ct_not_memequal _gcry_ct_not_memequal
+#define ct_memequal _gcry_ct_memequal
+#define ct_memmov_cond _gcry_ct_memmov_cond
+
+
+#ifndef HAVE_GCC_ASM_VOLATILE_MEMORY
+extern volatile unsigned int _gcry_ct_vzero;
+extern volatile unsigned int _gcry_ct_vone;
+#endif
+
+
+/*
+ * Return 0 if A is 0 and return 1 otherwise.
+ */
+static inline unsigned int
+ct_is_not_zero (unsigned int a)
+{
+ /* Sign bit set if A != 0. */
+ a = a | (-a);
+
+ return a >> (sizeof(unsigned int) * 8 - 1);
+}
+
+/*
+ * Return 1 if A is 0 and return 0 otherwise.
+ */
+static inline unsigned int
+ct_is_zero (unsigned int a)
+{
+ /* Sign bit set if A == 0. */
+ a = ~a & ~(-a);
+
+ return a >> (sizeof(unsigned int) * 8 - 1);
+}
+
+/*
+ * Return 1 if it's not same, 0 if same.
+ */
+static inline unsigned int
+ct_not_equal_byte (unsigned char b0, unsigned char b1)
+{
+ unsigned int diff;
+
+ diff = b0;
+ diff ^= b1;
+
+ return (0U - diff) >> (sizeof (unsigned int)*8 - 1);
+}
+
+/* Compare byte-arrays of length LEN, return 1 if it's not same, 0
+ otherwise. We use pointer of void *, so that it can be used with
+ any structure. */
+unsigned int _gcry_ct_not_memequal (const void *b1, const void *b2, size_t len);
+
+/* Compare byte-arrays of length LEN, return 0 if it's not same, 1
+ otherwise. We use pointer of void *, so that it can be used with
+ any structure. */
+unsigned int _gcry_ct_memequal (const void *b1, const void *b2, size_t len);
+
+/*
+ * Return all bits set if A is 1 and return 0 otherwise.
+ */
+#ifdef HAVE_GCC_ASM_VOLATILE_MEMORY
+# define DEFINE_CT_TYPE_GEN_MASK(name, type) \
+ static inline type \
+ ct_##name##_gen_mask (unsigned long op_enable) \
+ { \
+ type mask = -(type)op_enable; \
+ asm volatile ("\n" : "+r" (mask) :: "memory"); \
+ return mask; \
+ }
+#else
+# define DEFINE_CT_TYPE_GEN_MASK(name, type) \
+ static inline type \
+ ct_##name##_gen_mask (unsigned long op_enable) \
+ { \
+ type mask = (type)_gcry_ct_vzero - (type)op_enable; \
+ return mask; \
+ }
+#endif
+DEFINE_CT_TYPE_GEN_MASK(uintptr, uintptr_t)
+DEFINE_CT_TYPE_GEN_MASK(ulong, unsigned long)
+
+/*
+ * Return all bits set if A is 0 and return 1 otherwise.
+ */
+#ifdef HAVE_GCC_ASM_VOLATILE_MEMORY
+# define DEFINE_CT_TYPE_GEN_INV_MASK(name, type) \
+ static inline type \
+ ct_##name##_gen_inv_mask (unsigned long op_enable) \
+ { \
+ type mask = (type)op_enable - (type)1; \
+ asm volatile ("\n" : "+r" (mask) :: "memory"); \
+ return mask; \
+ }
+#else
+# define DEFINE_CT_TYPE_GEN_INV_MASK(name, type) \
+ static inline type \
+ ct_##name##_gen_inv_mask (unsigned long op_enable) \
+ { \
+ type mask = (type)op_enable - (type)_gcry_ct_vone; \
+ return mask; \
+ }
+#endif
+DEFINE_CT_TYPE_GEN_INV_MASK(uintptr, uintptr_t)
+DEFINE_CT_TYPE_GEN_INV_MASK(ulong, unsigned long)
+
+/*
+ * Return A when OP_ENABLED=1
+ * otherwise, return B
+ */
+#define DEFINE_CT_TYPE_SELECT_FUNC(name, type) \
+ static inline type \
+ ct_##name##_select (type a, type b, unsigned long op_enable) \
+ { \
+ type mask_b = ct_##name##_gen_inv_mask(op_enable); \
+ type mask_a = ct_##name##_gen_mask(op_enable); \
+ return (mask_a & a) | (mask_b & b); \
+ }
+DEFINE_CT_TYPE_SELECT_FUNC(uintptr, uintptr_t)
+DEFINE_CT_TYPE_SELECT_FUNC(ulong, unsigned long)
+
+/*
+ * Return NULL when OP_ENABLED=1
+ * otherwise, return W
+ */
+static inline gcry_sexp_t
+sexp_null_cond (gcry_sexp_t w, unsigned long op_enable)
+{
+ uintptr_t o = ct_uintptr_select((uintptr_t)NULL, (uintptr_t)w, op_enable);
+ return (gcry_sexp_t)(void *)o;
+}
+
+/*
+ * Copy LEN bytes from memory area SRC to memory area DST, when
+ * OP_ENABLED=1. When DST <= SRC, the memory areas may overlap. When
+ * DST > SRC, the memory areas must not overlap.
+ */
+void _gcry_ct_memmov_cond (void *dst, const void *src, size_t len,
+ unsigned long op_enable);
+
+#endif /*GCRY_CONST_TIME_H*/
case GCRY_CIPHER_MODE_OFB:
case GCRY_CIPHER_MODE_CTR:
case GCRY_CIPHER_MODE_CCM:
- case GCRY_CIPHER_MODE_GCM:
case GCRY_CIPHER_MODE_XTS:
+ case GCRY_CIPHER_MODE_AESWRAP:
return GPG_ERR_NO_ERROR;
default:
return GPG_ERR_NOT_SUPPORTED;
}
}
+int
+_gcry_fips_indicator_mac (va_list arg_ptr)
+{
+ enum gcry_mac_algos alg = va_arg (arg_ptr, enum gcry_mac_algos);
+
+ switch (alg)
+ {
+ case GCRY_MAC_CMAC_AES:
+ case GCRY_MAC_HMAC_SHA1:
+ case GCRY_MAC_HMAC_SHA224:
+ case GCRY_MAC_HMAC_SHA256:
+ case GCRY_MAC_HMAC_SHA384:
+ case GCRY_MAC_HMAC_SHA512:
+ case GCRY_MAC_HMAC_SHA512_224:
+ case GCRY_MAC_HMAC_SHA512_256:
+ case GCRY_MAC_HMAC_SHA3_224:
+ case GCRY_MAC_HMAC_SHA3_256:
+ case GCRY_MAC_HMAC_SHA3_384:
+ case GCRY_MAC_HMAC_SHA3_512:
+ return GPG_ERR_NO_ERROR;
+ default:
+ return GPG_ERR_NOT_SUPPORTED;
+ }
+}
+
+int
+_gcry_fips_indicator_md (va_list arg_ptr)
+{
+ enum gcry_md_algos alg = va_arg (arg_ptr, enum gcry_md_algos);
+
+ switch (alg)
+ {
+ case GCRY_MD_SHA1:
+ case GCRY_MD_SHA224:
+ case GCRY_MD_SHA256:
+ case GCRY_MD_SHA384:
+ case GCRY_MD_SHA512:
+ case GCRY_MD_SHA512_224:
+ case GCRY_MD_SHA512_256:
+ case GCRY_MD_SHA3_224:
+ case GCRY_MD_SHA3_256:
+ case GCRY_MD_SHA3_384:
+ case GCRY_MD_SHA3_512:
+ case GCRY_MD_SHAKE128:
+ case GCRY_MD_SHAKE256:
+ return GPG_ERR_NO_ERROR;
+ default:
+ return GPG_ERR_NOT_SUPPORTED;
+ }
+}
+
int
_gcry_fips_indicator_kdf (va_list arg_ptr)
{
}
}
+int
+_gcry_fips_indicator_function (va_list arg_ptr)
+{
+ const char *function = va_arg (arg_ptr, const char *);
+
+ if (strcmp (function, "gcry_pk_sign") == 0 ||
+ strcmp (function, "gcry_pk_verify") == 0 ||
+ strcmp (function, "gcry_pk_encrypt") == 0 ||
+ strcmp (function, "gcry_pk_decrypt") == 0 ||
+ strcmp (function, "gcry_pk_random_override_new") == 0)
+ return GPG_ERR_NOT_SUPPORTED;
+
+ return GPG_ERR_NO_ERROR;
+}
+
+/* Note: the array should be sorted. */
+static const char *valid_string_in_sexp[] = {
+ "curve",
+ "d",
+ "data",
+ "e",
+ "ecdsa",
+ "flags",
+ "genkey",
+ "hash",
+ "n",
+ "nbits",
+ "pkcs1",
+ "private-key",
+ "pss",
+ "public-key",
+ "q",
+ "r",
+ "raw",
+ "rsa",
+ "rsa-use-e",
+ "s",
+ "salt-length",
+ "sig-val",
+ "value"
+};
+
+static int
+compare_string (const void *v1, const void *v2)
+{
+ const char * const *p_str1 = v1;
+ const char * const *p_str2 = v2;
+
+ return strcmp (*p_str1, *p_str2);
+}
+
+int
+_gcry_fips_indicator_pk_flags (va_list arg_ptr)
+{
+ const char *flag = va_arg (arg_ptr, const char *);
+
+ if (bsearch (&flag, valid_string_in_sexp, DIM (valid_string_in_sexp),
+ sizeof (char *), compare_string))
+ return GPG_ERR_NO_ERROR;
+
+ return GPG_ERR_NOT_SUPPORTED;
+}
+
/* This is a test on whether the library is in the error or
operational state. */
return gpg_error_from_syserror ();
off = ftell (fp);
+ if (off < 0)
+ return gpg_error_from_syserror ();
if (shdr.sh_type == SHT_NOTE && shdr.sh_flags == 0 && shdr.sh_size == 48)
{
const char header_of_the_note[] = {
#endif
int _gcry_fips_indicator_cipher (va_list arg_ptr);
+int _gcry_fips_indicator_mac (va_list arg_ptr);
+int _gcry_fips_indicator_md (va_list arg_ptr);
int _gcry_fips_indicator_kdf (va_list arg_ptr);
+int _gcry_fips_indicator_function (va_list arg_ptr);
+int _gcry_fips_indicator_pk_flags (va_list arg_ptr);
int _gcry_fips_is_operational (void);
const void *salt, size_t saltlen,
const void *key, size_t keylen,
const void *ad, size_t adlen);
-gcry_error_t _gcry_kdf_compute (gcry_kdf_hd_t h,
- const struct gcry_kdf_thread_ops *ops);
+gcry_err_code_t _gcry_kdf_compute (gcry_kdf_hd_t h,
+ const struct gcry_kdf_thread_ops *ops);
gpg_err_code_t _gcry_kdf_final (gcry_kdf_hd_t h, size_t resultlen, void *result);
void _gcry_kdf_close (gcry_kdf_hd_t h);
static inline int
_gcry_err_code_to_errno (gcry_err_code_t code)
{
- return gpg_err_code_from_errno (code);
+ return gpg_err_code_to_errno (code);
}
/* Return an error value with the error source SOURCE and the system
/* gcrypt.h - GNU Cryptographic Library Interface -*- c -*-
- * Copyright (C) 2012-2022 g10 Code GmbH
- * Copyright (C) 2013-2022 Jussi Kivilinna
+ * Copyright (C) 2012-2023 g10 Code GmbH
+ * Copyright (C) 2013-2023 Jussi Kivilinna
* Copyright (C) 1998-2018 Free Software Foundation, Inc.
*
* This file is part of Libgcrypt.
GCRYCTL_SET_DECRYPTION_TAG = 80,
GCRYCTL_FIPS_SERVICE_INDICATOR_CIPHER = 81,
GCRYCTL_FIPS_SERVICE_INDICATOR_KDF = 82,
- GCRYCTL_NO_FIPS_MODE = 83
+ GCRYCTL_NO_FIPS_MODE = 83,
+ GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION = 84,
+ GCRYCTL_FIPS_SERVICE_INDICATOR_MAC = 85,
+ GCRYCTL_FIPS_SERVICE_INDICATOR_MD = 86,
+ GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS = 87
};
/* Perform various operations defined by CMD. */
cipher handle H. */
#define gcry_cipher_sync(h) gcry_cipher_ctl( (h), GCRYCTL_CFB_SYNC, NULL, 0)
-/* Enable or disable CTS in future calls to gcry_encrypt(). CBC mode only. */
+/* Enable or disable CTS in future calls to gcry_cipher_encrypt().
+ * CBC mode only. */
#define gcry_cipher_cts(h,on) gcry_cipher_ctl( (h), GCRYCTL_SET_CBC_CTS, \
NULL, on )
rc = _gcry_fips_indicator_cipher (arg_ptr);
break;
+ case GCRYCTL_FIPS_SERVICE_INDICATOR_MAC:
+ /* Get FIPS Service Indicator for a given message authentication code.
+ * Returns GPG_ERR_NO_ERROR if algorithm is allowed or
+ * GPG_ERR_NOT_SUPPORTED otherwise */
+ rc = _gcry_fips_indicator_mac (arg_ptr);
+ break;
+
+ case GCRYCTL_FIPS_SERVICE_INDICATOR_MD:
+ /* Get FIPS Service Indicator for a given message digest. Returns
+ * GPG_ERR_NO_ERROR if algorithm is allowed or GPG_ERR_NOT_SUPPORTED
+ * otherwise */
+ rc = _gcry_fips_indicator_md (arg_ptr);
+ break;
+
case GCRYCTL_FIPS_SERVICE_INDICATOR_KDF:
/* Get FIPS Service Indicator for a given KDF. Returns GPG_ERR_NO_ERROR
* if algorithm is allowed or GPG_ERR_NOT_SUPPORTED otherwise */
rc = _gcry_fips_indicator_kdf (arg_ptr);
break;
+ case GCRYCTL_FIPS_SERVICE_INDICATOR_FUNCTION:
+ /* Get FIPS Service Indicator for a given function from the API.
+ * Returns GPG_ERR_NO_ERROR if the function is allowed or
+ * GPG_ERR_NOT_SUPPORTED otherwise */
+ rc = _gcry_fips_indicator_function (arg_ptr);
+ break;
+
+ case GCRYCTL_FIPS_SERVICE_INDICATOR_PK_FLAGS:
+ /* Get FIPS Service Indicator for a public key operation flags.
+ * Returns GPG_ERR_NO_ERROR if the flag is allowed to be used or
+ * GPG_ERR_NOT_SUPPORTED otherwise */
+ rc = _gcry_fips_indicator_pk_flags (arg_ptr);
+ break;
+
case PRIV_CTL_INIT_EXTRNG_TEST: /* Init external random test. */
rc = GPG_ERR_NOT_SUPPORTED;
break;
{
global_init ();
- if (fips_mode () )
- {
- log_info ("out of core handler ignored in FIPS mode\n");
- return;
- }
+ if (fips_mode ())
+ return;
outofcore_handler = f;
outofcore_handler_value = value;
{ 0, PPC_FEATURE2_VEC_CRYPTO, HWF_PPC_VCRYPTO },
#endif
{ 0, PPC_FEATURE2_ARCH_3_00, HWF_PPC_ARCH_3_00 },
+ { 0, PPC_FEATURE2_ARCH_3_10, HWF_PPC_ARCH_3_10 },
};
#endif
return 0;
}
-#if 0 // TODO: configure.ac detection for __builtin_cpu_supports
- // TODO: move to 'detect_ppc_builtin_cpu_supports'
+#if 0 /* TODO: configure.ac detection for __builtin_cpu_supports */
+ /* TODO: move to 'detect_ppc_builtin_cpu_supports' */
#if defined(__GLIBC__) && defined(__GNUC__) && __GNUC__ >= 6
/* __builtin_cpu_supports returns 0 if glibc support doesn't exist, so
* we can only trust positive results. */
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
-# Last-changed: 2020-09-27
+# Last-changed: 2022-11-01
dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
fi
use_gpgrt_config=""
- if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
+ if test x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then
if $GPGRT_CONFIG libgcrypt --exists; then
LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt"
AC_MSG_NOTICE([Use gpgrt-config as libgcrypt-config])
static void
-do_add (void)
+do_add (int usemod)
{
- if (stackidx < 2)
+ if (stackidx < (usemod?3:2))
{
fputs ("stack underflow\n", stderr);
return;
}
- mpi_add (stack[stackidx - 2], stack[stackidx - 2], stack[stackidx - 1]);
+ if (usemod)
+ {
+ mpi_addm (stack[stackidx - 3], stack[stackidx - 3],
+ stack[stackidx - 2], stack[stackidx - 1]);
+ stackidx--;
+ }
+ else
+ mpi_add (stack[stackidx - 2], stack[stackidx - 2], stack[stackidx - 1]);
stackidx--;
}
static void
-do_sub (void)
+do_sub (int usemod)
{
- if (stackidx < 2)
+ if (stackidx < (usemod?3:2))
{
fputs ("stack underflow\n", stderr);
return;
}
- mpi_sub (stack[stackidx - 2], stack[stackidx - 2], stack[stackidx - 1]);
+ if (usemod)
+ {
+ mpi_subm (stack[stackidx - 3], stack[stackidx - 3],
+ stack[stackidx - 2], stack[stackidx - 1]);
+ stackidx--;
+ }
+ else
+ mpi_sub (stack[stackidx - 2], stack[stackidx - 2], stack[stackidx - 1]);
stackidx--;
}
"r reverse [0] := [1], [1] := [0] {0}\n"
"b # of bits [0] := nbits([0]) {0}\n"
"P prime check [0] := is_prime([0])?1:0 {0}\n"
+ "M use mod for next '+' and '-'\n"
"c clear stack\n"
"p print top item\n"
"f print the stack\n"
int state = 0;
char strbuf[4096];
int stridx = 0;
+ int usemod = 0;
if (argc)
{
else
{
ungetc (c, stdin);
- do_add ();
+ do_add (usemod);
+ usemod = 0;
}
break;
case '-':
else
{
ungetc (c, stdin);
- do_sub ();
+ do_sub (usemod);
+ usemod = 0;
}
break;
case '*':
case 'P':
do_primecheck ();
break;
+ case 'M':
+ usemod = 1;
+ break;
case 'c':
for (i = 0; i < stackidx; i++)
{
if (*buffer & 0x80)
return 0; /* If the MSB is set we assume that buffer represents a
negative number. */
- if (!*buffer)
- return 0; /* Starting with a zero is pretty much a binary string. */
for (s=buffer; length; s++, length--)
{
+ if (!*s)
+ return 0; /*binary*/
if ( (*s < 0x20 || (*s >= 0x7f && *s <= 0xa0))
&& !strchr ("\b\t\v\n\f\r\"\'\\", *s))
return 0; /*binary*/
VALUE "FileDescription", "Libgcrypt - The GNU Crypto Library\0"
VALUE "FileVersion", "@LIBGCRYPT_LT_CURRENT@.@LIBGCRYPT_LT_AGE@.@LIBGCRYPT_LT_REVISION@.@BUILD_REVISION@\0"
VALUE "InternalName", "libgcrypt\0"
- VALUE "LegalCopyright", "Copyright © 2022 g10 Code GmbH\0"
+ VALUE "LegalCopyright", "Copyright © 2023 g10 Code GmbH\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "libgcrypt.dll\0"
VALUE "PrivateBuild", "\0"
if (!fips_is_operational ())
return gpg_error (fips_not_operational ());
+ if (fips_mode () && keylen < 14)
+ return GPG_ERR_INV_VALUE;
+
return gpg_error (_gcry_mac_setkey (hd, key, keylen));
}
gcry_pk_hash_sign (gcry_sexp_t *result, const char *data_tmpl, gcry_sexp_t skey,
gcry_md_hd_t hd, gcry_ctx_t ctx)
{
+ if (!fips_is_operational ())
+ {
+ *result = NULL;
+ return gpg_error (fips_not_operational ());
+ }
return gpg_error (_gcry_pk_sign_md (result, data_tmpl, hd, skey, ctx));
}
gcry_pk_hash_verify (gcry_sexp_t sigval, const char *data_tmpl, gcry_sexp_t pkey,
gcry_md_hd_t hd, gcry_ctx_t ctx)
{
+ if (!fips_is_operational ())
+ return gpg_error (fips_not_operational ());
return gpg_error (_gcry_pk_verify_md (sigval, data_tmpl, hd, pkey, ctx));
}
{
if (!fips_is_operational ())
return gpg_error (fips_not_operational ());
+
+ if (fips_mode () && keylen < 14)
+ return GPG_ERR_INV_VALUE;
+
return gpg_error (_gcry_md_setkey (hd, key, keylen));
}
# the driver is only used for cross-compiling.
tests_bin = \
version t-secmem mpitests t-sexp t-convert \
- t-mpi-bit t-mpi-point curves t-lock \
+ t-mpi-bit t-mpi-point t-lock \
prime basic keygen pubkey hmac hashtest t-kdf keygrip \
- fips186-dsa aeswrap pkcs1v2 random dsa-rfc6979 \
- t-dsa t-ecdsa t-rsa-pss t-rsa-15 \
- t-ed25519 t-cv25519 t-x448 t-ed448
+ aeswrap random
+
+if USE_RSA
+tests_bin += pkcs1v2 t-rsa-pss t-rsa-15 t-rsa-testparm
+endif
+
+if USE_DSA
+tests_bin += fips186-dsa dsa-rfc6979 t-dsa
+endif
+
+if USE_ECC
+tests_bin += curves t-ecdsa t-ed25519 t-cv25519 t-x448 t-ed448
+endif
+
tests_bin_last = benchmark bench-slope
--- /dev/null
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is part of Libgcrypt.
+#
+# Libgcrypt is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of
+# the License, or (at your option) any later version.
+#
+# Libgcrypt is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_RSA_TRUE@am__append_1 = pkcs1v2 t-rsa-pss t-rsa-15 t-rsa-testparm
+@USE_DSA_TRUE@am__append_2 = fips186-dsa dsa-rfc6979 t-dsa
+@USE_ECC_TRUE@am__append_3 = curves t-ecdsa t-ed25519 t-cv25519 t-x448 t-ed448
+TESTS = $(am__EXEEXT_4) $(tests_sh) $(am__EXEEXT_5) $(tests_sh_last)
+EXTRA_PROGRAMS = testapi$(EXEEXT) pkbench$(EXEEXT)
+noinst_PROGRAMS = testdrv$(EXEEXT) $(am__EXEEXT_4) $(am__EXEEXT_5) \
+ fipsdrv$(EXEEXT) rsacvt$(EXEEXT) genhashdata$(EXEEXT) \
+ gchash$(EXEEXT)
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cc_for_build.m4 \
+ $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/socklen.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+ $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = hashtest-256g basic-disable-all-hwf
+CONFIG_CLEAN_VPATH_FILES =
+@USE_RSA_TRUE@am__EXEEXT_1 = pkcs1v2$(EXEEXT) t-rsa-pss$(EXEEXT) \
+@USE_RSA_TRUE@ t-rsa-15$(EXEEXT) t-rsa-testparm$(EXEEXT)
+@USE_DSA_TRUE@am__EXEEXT_2 = fips186-dsa$(EXEEXT) dsa-rfc6979$(EXEEXT) \
+@USE_DSA_TRUE@ t-dsa$(EXEEXT)
+@USE_ECC_TRUE@am__EXEEXT_3 = curves$(EXEEXT) t-ecdsa$(EXEEXT) \
+@USE_ECC_TRUE@ t-ed25519$(EXEEXT) t-cv25519$(EXEEXT) \
+@USE_ECC_TRUE@ t-x448$(EXEEXT) t-ed448$(EXEEXT)
+am__EXEEXT_4 = version$(EXEEXT) t-secmem$(EXEEXT) mpitests$(EXEEXT) \
+ t-sexp$(EXEEXT) t-convert$(EXEEXT) t-mpi-bit$(EXEEXT) \
+ t-mpi-point$(EXEEXT) t-lock$(EXEEXT) prime$(EXEEXT) \
+ basic$(EXEEXT) keygen$(EXEEXT) pubkey$(EXEEXT) hmac$(EXEEXT) \
+ hashtest$(EXEEXT) t-kdf$(EXEEXT) keygrip$(EXEEXT) \
+ aeswrap$(EXEEXT) random$(EXEEXT) $(am__EXEEXT_1) \
+ $(am__EXEEXT_2) $(am__EXEEXT_3)
+am__EXEEXT_5 = benchmark$(EXEEXT) bench-slope$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+aeswrap_SOURCES = aeswrap.c
+aeswrap_OBJECTS = aeswrap.$(OBJEXT)
+aeswrap_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+aeswrap_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+basic_SOURCES = basic.c
+basic_OBJECTS = basic.$(OBJEXT)
+basic_LDADD = $(LDADD)
+basic_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+bench_slope_SOURCES = bench-slope.c
+bench_slope_OBJECTS = bench-slope.$(OBJEXT)
+bench_slope_LDADD = $(LDADD)
+bench_slope_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+benchmark_SOURCES = benchmark.c
+benchmark_OBJECTS = benchmark.$(OBJEXT)
+benchmark_LDADD = $(LDADD)
+benchmark_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+curves_SOURCES = curves.c
+curves_OBJECTS = curves.$(OBJEXT)
+curves_LDADD = $(LDADD)
+curves_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+dsa_rfc6979_SOURCES = dsa-rfc6979.c
+dsa_rfc6979_OBJECTS = dsa-rfc6979.$(OBJEXT)
+dsa_rfc6979_LDADD = $(LDADD)
+dsa_rfc6979_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+fips186_dsa_SOURCES = fips186-dsa.c
+fips186_dsa_OBJECTS = fips186-dsa.$(OBJEXT)
+fips186_dsa_LDADD = $(LDADD)
+fips186_dsa_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+fipsdrv_SOURCES = fipsdrv.c
+fipsdrv_OBJECTS = fipsdrv.$(OBJEXT)
+fipsdrv_LDADD = $(LDADD)
+fipsdrv_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+gchash_SOURCES = gchash.c
+gchash_OBJECTS = gchash.$(OBJEXT)
+gchash_LDADD = $(LDADD)
+gchash_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+genhashdata_SOURCES = genhashdata.c
+genhashdata_OBJECTS = genhashdata.$(OBJEXT)
+genhashdata_LDADD = $(LDADD)
+genhashdata_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+hashtest_SOURCES = hashtest.c
+hashtest_OBJECTS = hashtest.$(OBJEXT)
+hashtest_LDADD = $(LDADD)
+hashtest_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+hmac_SOURCES = hmac.c
+hmac_OBJECTS = hmac.$(OBJEXT)
+hmac_LDADD = $(LDADD)
+hmac_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+keygen_SOURCES = keygen.c
+keygen_OBJECTS = keygen.$(OBJEXT)
+keygen_LDADD = $(LDADD)
+keygen_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+keygrip_SOURCES = keygrip.c
+keygrip_OBJECTS = keygrip.$(OBJEXT)
+keygrip_LDADD = $(LDADD)
+keygrip_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+mpitests_SOURCES = mpitests.c
+mpitests_OBJECTS = mpitests.$(OBJEXT)
+mpitests_LDADD = $(LDADD)
+mpitests_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+pkbench_SOURCES = pkbench.c
+pkbench_OBJECTS = pkbench.$(OBJEXT)
+pkbench_DEPENDENCIES = $(standard_ldadd)
+pkcs1v2_SOURCES = pkcs1v2.c
+pkcs1v2_OBJECTS = pkcs1v2.$(OBJEXT)
+pkcs1v2_LDADD = $(LDADD)
+pkcs1v2_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+prime_SOURCES = prime.c
+prime_OBJECTS = prime.$(OBJEXT)
+prime_DEPENDENCIES = $(standard_ldadd)
+pubkey_SOURCES = pubkey.c
+pubkey_OBJECTS = pubkey.$(OBJEXT)
+pubkey_LDADD = $(LDADD)
+pubkey_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+random_SOURCES = random.c
+random_OBJECTS = random.$(OBJEXT)
+random_LDADD = $(LDADD)
+random_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+rsacvt_SOURCES = rsacvt.c
+rsacvt_OBJECTS = rsacvt.$(OBJEXT)
+rsacvt_LDADD = $(LDADD)
+rsacvt_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_convert_SOURCES = t-convert.c
+t_convert_OBJECTS = t-convert.$(OBJEXT)
+t_convert_LDADD = $(LDADD)
+t_convert_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_cv25519_SOURCES = t-cv25519.c
+t_cv25519_OBJECTS = t-cv25519.$(OBJEXT)
+t_cv25519_LDADD = $(LDADD)
+t_cv25519_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_dsa_SOURCES = t-dsa.c
+t_dsa_OBJECTS = t-dsa.$(OBJEXT)
+t_dsa_LDADD = $(LDADD)
+t_dsa_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_ecdsa_SOURCES = t-ecdsa.c
+t_ecdsa_OBJECTS = t-ecdsa.$(OBJEXT)
+t_ecdsa_LDADD = $(LDADD)
+t_ecdsa_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_ed25519_SOURCES = t-ed25519.c
+t_ed25519_OBJECTS = t-ed25519.$(OBJEXT)
+t_ed25519_LDADD = $(LDADD)
+t_ed25519_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_ed448_SOURCES = t-ed448.c
+t_ed448_OBJECTS = t-ed448.$(OBJEXT)
+t_ed448_LDADD = $(LDADD)
+t_ed448_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_kdf_SOURCES = t-kdf.c
+t_kdf_OBJECTS = t_kdf-t-kdf.$(OBJEXT)
+@HAVE_W32_SYSTEM_FALSE@t_kdf_DEPENDENCIES = $(standard_ldadd) \
+@HAVE_W32_SYSTEM_FALSE@ $(am__DEPENDENCIES_1)
+@HAVE_W32_SYSTEM_TRUE@t_kdf_DEPENDENCIES = $(standard_ldadd) \
+@HAVE_W32_SYSTEM_TRUE@ $(am__DEPENDENCIES_1)
+t_kdf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(t_kdf_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+t_lock_SOURCES = t-lock.c
+t_lock_OBJECTS = t_lock-t-lock.$(OBJEXT)
+t_lock_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_lock_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(t_lock_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+t_mpi_bit_SOURCES = t-mpi-bit.c
+t_mpi_bit_OBJECTS = t-mpi-bit.$(OBJEXT)
+t_mpi_bit_DEPENDENCIES = $(standard_ldadd)
+t_mpi_point_SOURCES = t-mpi-point.c
+t_mpi_point_OBJECTS = t-mpi-point.$(OBJEXT)
+t_mpi_point_LDADD = $(LDADD)
+t_mpi_point_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_rsa_15_SOURCES = t-rsa-15.c
+t_rsa_15_OBJECTS = t-rsa-15.$(OBJEXT)
+t_rsa_15_LDADD = $(LDADD)
+t_rsa_15_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_rsa_pss_SOURCES = t-rsa-pss.c
+t_rsa_pss_OBJECTS = t-rsa-pss.$(OBJEXT)
+t_rsa_pss_LDADD = $(LDADD)
+t_rsa_pss_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_rsa_testparm_SOURCES = t-rsa-testparm.c
+t_rsa_testparm_OBJECTS = t-rsa-testparm.$(OBJEXT)
+t_rsa_testparm_LDADD = $(LDADD)
+t_rsa_testparm_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_secmem_SOURCES = t-secmem.c
+t_secmem_OBJECTS = t-secmem.$(OBJEXT)
+t_secmem_DEPENDENCIES = $(standard_ldadd)
+t_sexp_SOURCES = t-sexp.c
+t_sexp_OBJECTS = t-sexp.$(OBJEXT)
+t_sexp_LDADD = $(LDADD)
+t_sexp_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+t_x448_SOURCES = t-x448.c
+t_x448_OBJECTS = t-x448.$(OBJEXT)
+t_x448_LDADD = $(LDADD)
+t_x448_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+testapi_SOURCES = testapi.c
+testapi_OBJECTS = testapi.$(OBJEXT)
+testapi_DEPENDENCIES = $(standard_ldadd)
+testdrv_SOURCES = testdrv.c
+testdrv_OBJECTS = testdrv.$(OBJEXT)
+testdrv_DEPENDENCIES = $(am__DEPENDENCIES_1)
+version_SOURCES = version.c
+version_OBJECTS = version.$(OBJEXT)
+version_LDADD = $(LDADD)
+version_DEPENDENCIES = $(standard_ldadd) $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/aeswrap.Po ./$(DEPDIR)/basic.Po \
+ ./$(DEPDIR)/bench-slope.Po ./$(DEPDIR)/benchmark.Po \
+ ./$(DEPDIR)/curves.Po ./$(DEPDIR)/dsa-rfc6979.Po \
+ ./$(DEPDIR)/fips186-dsa.Po ./$(DEPDIR)/fipsdrv.Po \
+ ./$(DEPDIR)/gchash.Po ./$(DEPDIR)/genhashdata.Po \
+ ./$(DEPDIR)/hashtest.Po ./$(DEPDIR)/hmac.Po \
+ ./$(DEPDIR)/keygen.Po ./$(DEPDIR)/keygrip.Po \
+ ./$(DEPDIR)/mpitests.Po ./$(DEPDIR)/pkbench.Po \
+ ./$(DEPDIR)/pkcs1v2.Po ./$(DEPDIR)/prime.Po \
+ ./$(DEPDIR)/pubkey.Po ./$(DEPDIR)/random.Po \
+ ./$(DEPDIR)/rsacvt.Po ./$(DEPDIR)/t-convert.Po \
+ ./$(DEPDIR)/t-cv25519.Po ./$(DEPDIR)/t-dsa.Po \
+ ./$(DEPDIR)/t-ecdsa.Po ./$(DEPDIR)/t-ed25519.Po \
+ ./$(DEPDIR)/t-ed448.Po ./$(DEPDIR)/t-mpi-bit.Po \
+ ./$(DEPDIR)/t-mpi-point.Po ./$(DEPDIR)/t-rsa-15.Po \
+ ./$(DEPDIR)/t-rsa-pss.Po ./$(DEPDIR)/t-rsa-testparm.Po \
+ ./$(DEPDIR)/t-secmem.Po ./$(DEPDIR)/t-sexp.Po \
+ ./$(DEPDIR)/t-x448.Po ./$(DEPDIR)/t_kdf-t-kdf.Po \
+ ./$(DEPDIR)/t_lock-t-lock.Po ./$(DEPDIR)/testapi.Po \
+ ./$(DEPDIR)/testdrv.Po ./$(DEPDIR)/version.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = aeswrap.c basic.c bench-slope.c benchmark.c curves.c \
+ dsa-rfc6979.c fips186-dsa.c fipsdrv.c gchash.c genhashdata.c \
+ hashtest.c hmac.c keygen.c keygrip.c mpitests.c pkbench.c \
+ pkcs1v2.c prime.c pubkey.c random.c rsacvt.c t-convert.c \
+ t-cv25519.c t-dsa.c t-ecdsa.c t-ed25519.c t-ed448.c t-kdf.c \
+ t-lock.c t-mpi-bit.c t-mpi-point.c t-rsa-15.c t-rsa-pss.c \
+ t-rsa-testparm.c t-secmem.c t-sexp.c t-x448.c testapi.c \
+ testdrv.c version.c
+DIST_SOURCES = aeswrap.c basic.c bench-slope.c benchmark.c curves.c \
+ dsa-rfc6979.c fips186-dsa.c fipsdrv.c gchash.c genhashdata.c \
+ hashtest.c hmac.c keygen.c keygrip.c mpitests.c pkbench.c \
+ pkcs1v2.c prime.c pubkey.c random.c rsacvt.c t-convert.c \
+ t-cv25519.c t-dsa.c t-ecdsa.c t-ed25519.c t-ed448.c t-kdf.c \
+ t-lock.c t-mpi-bit.c t-mpi-point.c t-rsa-15.c t-rsa-pss.c \
+ t-rsa-testparm.c t-secmem.c t-sexp.c t-x448.c testapi.c \
+ testdrv.c version.c
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red='\e[0;31m'; \
+ grn='\e[0;32m'; \
+ lgn='\e[1;32m'; \
+ blu='\e[1;34m'; \
+ mgn='\e[0;35m'; \
+ brg='\e[1m'; \
+ std='\e[m'; \
+ fi; \
+}
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(srcdir)/basic-disable-all-hwf.in $(srcdir)/hashtest-256g.in \
+ $(top_srcdir)/build-aux/depcomp README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_FILEVERSION = @BUILD_FILEVERSION@
+BUILD_REVISION = @BUILD_REVISION@
+BUILD_TIMESTAMP = @BUILD_TIMESTAMP@
+BUILD_VERSION = @BUILD_VERSION@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CC_FOR_BUILD = @CC_FOR_BUILD@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEF_HMAC_BINARY_CHECK = @DEF_HMAC_BINARY_CHECK@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DL_LIBS = @DL_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
+FGREP = @FGREP@
+GCRYPT_CIPHERS = @GCRYPT_CIPHERS@
+GCRYPT_DIGESTS = @GCRYPT_DIGESTS@
+GCRYPT_HWF_MODULES = @GCRYPT_HWF_MODULES@
+GCRYPT_KDFS = @GCRYPT_KDFS@
+GCRYPT_PUBKEY_CIPHERS = @GCRYPT_PUBKEY_CIPHERS@
+GCRYPT_RANDOM = @GCRYPT_RANDOM@
+GPGRT_CONFIG = @GPGRT_CONFIG@
+GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@
+GPG_ERROR_CONFIG = @GPG_ERROR_CONFIG@
+GPG_ERROR_LIBS = @GPG_ERROR_LIBS@
+GPG_ERROR_MT_CFLAGS = @GPG_ERROR_MT_CFLAGS@
+GPG_ERROR_MT_LIBS = @GPG_ERROR_MT_LIBS@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_FOR_TESTS_KLUDGE = @LDADD_FOR_TESTS_KLUDGE@
+LDFLAGS = @LDFLAGS@
+LIBGCRYPT_CIPHERS = @LIBGCRYPT_CIPHERS@
+LIBGCRYPT_CONFIG_API_VERSION = @LIBGCRYPT_CONFIG_API_VERSION@
+LIBGCRYPT_CONFIG_CFLAGS = @LIBGCRYPT_CONFIG_CFLAGS@
+LIBGCRYPT_CONFIG_HOST = @LIBGCRYPT_CONFIG_HOST@
+LIBGCRYPT_CONFIG_LIBS = @LIBGCRYPT_CONFIG_LIBS@
+LIBGCRYPT_DIGESTS = @LIBGCRYPT_DIGESTS@
+LIBGCRYPT_LT_AGE = @LIBGCRYPT_LT_AGE@
+LIBGCRYPT_LT_CURRENT = @LIBGCRYPT_LT_CURRENT@
+LIBGCRYPT_LT_REVISION = @LIBGCRYPT_LT_REVISION@
+LIBGCRYPT_PUBKEY_CIPHERS = @LIBGCRYPT_PUBKEY_CIPHERS@
+LIBGCRYPT_THREAD_MODULES = @LIBGCRYPT_THREAD_MODULES@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPI_SFLAGS = @MPI_SFLAGS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@
+OBJCOPY = @OBJCOPY@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PTH_CFLAGS = @PTH_CFLAGS@
+PTH_CONFIG = @PTH_CONFIG@
+PTH_LIBS = @PTH_LIBS@
+RANLIB = @RANLIB@
+RC = @RC@
+READELF = @READELF@
+RUN_LARGE_DATA_TESTS = @RUN_LARGE_DATA_TESTS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+SYSROOT = @SYSROOT@
+VERSION = @VERSION@
+VERSION_NUMBER = @VERSION_NUMBER@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+emacs_local_vars_begin = @emacs_local_vars_begin@
+emacs_local_vars_end = @emacs_local_vars_end@
+emacs_local_vars_read_only = @emacs_local_vars_read_only@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Note: Please keep these tests in sync with those in testdrv.c.
+# We will eventually switch over to the the new driver but as of now
+# the driver is only used for cross-compiling.
+tests_bin = version t-secmem mpitests t-sexp t-convert t-mpi-bit \
+ t-mpi-point t-lock prime basic keygen pubkey hmac hashtest \
+ t-kdf keygrip aeswrap random $(am__append_1) $(am__append_2) \
+ $(am__append_3)
+tests_bin_last = benchmark bench-slope
+tests_sh = basic-disable-all-hwf
+tests_sh_last = hashtest-256g
+TESTS_ENVIRONMENT = GCRYPT_IN_REGRESSION_TEST=1
+
+# Need to include ../src in addition to top_srcdir because gcrypt.h is
+# a built header.
+AM_CPPFLAGS = -I../src -I$(top_srcdir)/src
+AM_CFLAGS = $(GPG_ERROR_CFLAGS)
+AM_LDFLAGS = -no-install
+standard_ldadd = \
+ ../src/libgcrypt.la \
+ ../compat/libcompat.la
+
+noinst_HEADERS = t-common.h
+CLEANFILES = testdrv-build
+EXTRA_DIST = README rsa-16k.key \
+ pkcs1v2-oaep.h pkcs1v2-pss.h pkcs1v2-v15c.h pkcs1v2-v15s.h \
+ t-ed25519.inp t-ed448.inp t-dsa.inp t-ecdsa.inp t-rsa-15.inp \
+ t-rsa-pss.inp stopwatch.h hashtest-256g.in sha3-224.h \
+ sha3-256.h sha3-384.h sha3-512.h blake2b.h blake2s.h \
+ basic-disable-all-hwf.in basic_all_hwfeature_combinations.sh
+
+LDADD = $(standard_ldadd) $(GPG_ERROR_LIBS) @LDADD_FOR_TESTS_KLUDGE@
+pkbench_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+prime_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+t_mpi_bit_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+t_secmem_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+testapi_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
+t_lock_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS) @LDADD_FOR_TESTS_KLUDGE@
+t_lock_CFLAGS = $(GPG_ERROR_MT_CFLAGS)
+testdrv_LDADD = $(LDADD_FOR_TESTS_KLUDGE)
+@HAVE_W32_SYSTEM_FALSE@xtestsuite_libs = ../src/.libs/libgcrypt.so*
+@HAVE_W32_SYSTEM_TRUE@xtestsuite_libs = ../src/.libs/libgcrypt-20.dll \
+@HAVE_W32_SYSTEM_TRUE@ $(prefix)/bin/libgpg-error*-0.dll
+
+@HAVE_W32_SYSTEM_FALSE@xtestsuite_driver = testdrv
+@HAVE_W32_SYSTEM_TRUE@xtestsuite_driver = .libs/testdrv.exe
+@HAVE_W32_SYSTEM_FALSE@t_kdf_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS) @LDADD_FOR_TESTS_KLUDGE@
+@HAVE_W32_SYSTEM_TRUE@t_kdf_LDADD = $(standard_ldadd) $(GPG_ERROR_LIBS) @LDADD_FOR_TESTS_KLUDGE@
+@HAVE_W32_SYSTEM_FALSE@t_kdf_CFLAGS = $(GPG_ERROR_MT_CFLAGS)
+@HAVE_W32_SYSTEM_TRUE@t_kdf_CFLAGS = $(GPG_ERROR_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+hashtest-256g: $(top_builddir)/config.status $(srcdir)/hashtest-256g.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+basic-disable-all-hwf: $(top_builddir)/config.status $(srcdir)/basic-disable-all-hwf.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+aeswrap$(EXEEXT): $(aeswrap_OBJECTS) $(aeswrap_DEPENDENCIES) $(EXTRA_aeswrap_DEPENDENCIES)
+ @rm -f aeswrap$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(aeswrap_OBJECTS) $(aeswrap_LDADD) $(LIBS)
+
+basic$(EXEEXT): $(basic_OBJECTS) $(basic_DEPENDENCIES) $(EXTRA_basic_DEPENDENCIES)
+ @rm -f basic$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(basic_OBJECTS) $(basic_LDADD) $(LIBS)
+
+bench-slope$(EXEEXT): $(bench_slope_OBJECTS) $(bench_slope_DEPENDENCIES) $(EXTRA_bench_slope_DEPENDENCIES)
+ @rm -f bench-slope$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(bench_slope_OBJECTS) $(bench_slope_LDADD) $(LIBS)
+
+benchmark$(EXEEXT): $(benchmark_OBJECTS) $(benchmark_DEPENDENCIES) $(EXTRA_benchmark_DEPENDENCIES)
+ @rm -f benchmark$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(benchmark_OBJECTS) $(benchmark_LDADD) $(LIBS)
+
+curves$(EXEEXT): $(curves_OBJECTS) $(curves_DEPENDENCIES) $(EXTRA_curves_DEPENDENCIES)
+ @rm -f curves$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(curves_OBJECTS) $(curves_LDADD) $(LIBS)
+
+dsa-rfc6979$(EXEEXT): $(dsa_rfc6979_OBJECTS) $(dsa_rfc6979_DEPENDENCIES) $(EXTRA_dsa_rfc6979_DEPENDENCIES)
+ @rm -f dsa-rfc6979$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dsa_rfc6979_OBJECTS) $(dsa_rfc6979_LDADD) $(LIBS)
+
+fips186-dsa$(EXEEXT): $(fips186_dsa_OBJECTS) $(fips186_dsa_DEPENDENCIES) $(EXTRA_fips186_dsa_DEPENDENCIES)
+ @rm -f fips186-dsa$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(fips186_dsa_OBJECTS) $(fips186_dsa_LDADD) $(LIBS)
+
+fipsdrv$(EXEEXT): $(fipsdrv_OBJECTS) $(fipsdrv_DEPENDENCIES) $(EXTRA_fipsdrv_DEPENDENCIES)
+ @rm -f fipsdrv$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(fipsdrv_OBJECTS) $(fipsdrv_LDADD) $(LIBS)
+
+gchash$(EXEEXT): $(gchash_OBJECTS) $(gchash_DEPENDENCIES) $(EXTRA_gchash_DEPENDENCIES)
+ @rm -f gchash$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(gchash_OBJECTS) $(gchash_LDADD) $(LIBS)
+
+genhashdata$(EXEEXT): $(genhashdata_OBJECTS) $(genhashdata_DEPENDENCIES) $(EXTRA_genhashdata_DEPENDENCIES)
+ @rm -f genhashdata$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(genhashdata_OBJECTS) $(genhashdata_LDADD) $(LIBS)
+
+hashtest$(EXEEXT): $(hashtest_OBJECTS) $(hashtest_DEPENDENCIES) $(EXTRA_hashtest_DEPENDENCIES)
+ @rm -f hashtest$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(hashtest_OBJECTS) $(hashtest_LDADD) $(LIBS)
+
+hmac$(EXEEXT): $(hmac_OBJECTS) $(hmac_DEPENDENCIES) $(EXTRA_hmac_DEPENDENCIES)
+ @rm -f hmac$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(hmac_OBJECTS) $(hmac_LDADD) $(LIBS)
+
+keygen$(EXEEXT): $(keygen_OBJECTS) $(keygen_DEPENDENCIES) $(EXTRA_keygen_DEPENDENCIES)
+ @rm -f keygen$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(keygen_OBJECTS) $(keygen_LDADD) $(LIBS)
+
+keygrip$(EXEEXT): $(keygrip_OBJECTS) $(keygrip_DEPENDENCIES) $(EXTRA_keygrip_DEPENDENCIES)
+ @rm -f keygrip$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(keygrip_OBJECTS) $(keygrip_LDADD) $(LIBS)
+
+mpitests$(EXEEXT): $(mpitests_OBJECTS) $(mpitests_DEPENDENCIES) $(EXTRA_mpitests_DEPENDENCIES)
+ @rm -f mpitests$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mpitests_OBJECTS) $(mpitests_LDADD) $(LIBS)
+
+pkbench$(EXEEXT): $(pkbench_OBJECTS) $(pkbench_DEPENDENCIES) $(EXTRA_pkbench_DEPENDENCIES)
+ @rm -f pkbench$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(pkbench_OBJECTS) $(pkbench_LDADD) $(LIBS)
+
+pkcs1v2$(EXEEXT): $(pkcs1v2_OBJECTS) $(pkcs1v2_DEPENDENCIES) $(EXTRA_pkcs1v2_DEPENDENCIES)
+ @rm -f pkcs1v2$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(pkcs1v2_OBJECTS) $(pkcs1v2_LDADD) $(LIBS)
+
+prime$(EXEEXT): $(prime_OBJECTS) $(prime_DEPENDENCIES) $(EXTRA_prime_DEPENDENCIES)
+ @rm -f prime$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(prime_OBJECTS) $(prime_LDADD) $(LIBS)
+
+pubkey$(EXEEXT): $(pubkey_OBJECTS) $(pubkey_DEPENDENCIES) $(EXTRA_pubkey_DEPENDENCIES)
+ @rm -f pubkey$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(pubkey_OBJECTS) $(pubkey_LDADD) $(LIBS)
+
+random$(EXEEXT): $(random_OBJECTS) $(random_DEPENDENCIES) $(EXTRA_random_DEPENDENCIES)
+ @rm -f random$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(random_OBJECTS) $(random_LDADD) $(LIBS)
+
+rsacvt$(EXEEXT): $(rsacvt_OBJECTS) $(rsacvt_DEPENDENCIES) $(EXTRA_rsacvt_DEPENDENCIES)
+ @rm -f rsacvt$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(rsacvt_OBJECTS) $(rsacvt_LDADD) $(LIBS)
+
+t-convert$(EXEEXT): $(t_convert_OBJECTS) $(t_convert_DEPENDENCIES) $(EXTRA_t_convert_DEPENDENCIES)
+ @rm -f t-convert$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_convert_OBJECTS) $(t_convert_LDADD) $(LIBS)
+
+t-cv25519$(EXEEXT): $(t_cv25519_OBJECTS) $(t_cv25519_DEPENDENCIES) $(EXTRA_t_cv25519_DEPENDENCIES)
+ @rm -f t-cv25519$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_cv25519_OBJECTS) $(t_cv25519_LDADD) $(LIBS)
+
+t-dsa$(EXEEXT): $(t_dsa_OBJECTS) $(t_dsa_DEPENDENCIES) $(EXTRA_t_dsa_DEPENDENCIES)
+ @rm -f t-dsa$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_dsa_OBJECTS) $(t_dsa_LDADD) $(LIBS)
+
+t-ecdsa$(EXEEXT): $(t_ecdsa_OBJECTS) $(t_ecdsa_DEPENDENCIES) $(EXTRA_t_ecdsa_DEPENDENCIES)
+ @rm -f t-ecdsa$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_ecdsa_OBJECTS) $(t_ecdsa_LDADD) $(LIBS)
+
+t-ed25519$(EXEEXT): $(t_ed25519_OBJECTS) $(t_ed25519_DEPENDENCIES) $(EXTRA_t_ed25519_DEPENDENCIES)
+ @rm -f t-ed25519$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_ed25519_OBJECTS) $(t_ed25519_LDADD) $(LIBS)
+
+t-ed448$(EXEEXT): $(t_ed448_OBJECTS) $(t_ed448_DEPENDENCIES) $(EXTRA_t_ed448_DEPENDENCIES)
+ @rm -f t-ed448$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_ed448_OBJECTS) $(t_ed448_LDADD) $(LIBS)
+
+t-kdf$(EXEEXT): $(t_kdf_OBJECTS) $(t_kdf_DEPENDENCIES) $(EXTRA_t_kdf_DEPENDENCIES)
+ @rm -f t-kdf$(EXEEXT)
+ $(AM_V_CCLD)$(t_kdf_LINK) $(t_kdf_OBJECTS) $(t_kdf_LDADD) $(LIBS)
+
+t-lock$(EXEEXT): $(t_lock_OBJECTS) $(t_lock_DEPENDENCIES) $(EXTRA_t_lock_DEPENDENCIES)
+ @rm -f t-lock$(EXEEXT)
+ $(AM_V_CCLD)$(t_lock_LINK) $(t_lock_OBJECTS) $(t_lock_LDADD) $(LIBS)
+
+t-mpi-bit$(EXEEXT): $(t_mpi_bit_OBJECTS) $(t_mpi_bit_DEPENDENCIES) $(EXTRA_t_mpi_bit_DEPENDENCIES)
+ @rm -f t-mpi-bit$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_mpi_bit_OBJECTS) $(t_mpi_bit_LDADD) $(LIBS)
+
+t-mpi-point$(EXEEXT): $(t_mpi_point_OBJECTS) $(t_mpi_point_DEPENDENCIES) $(EXTRA_t_mpi_point_DEPENDENCIES)
+ @rm -f t-mpi-point$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_mpi_point_OBJECTS) $(t_mpi_point_LDADD) $(LIBS)
+
+t-rsa-15$(EXEEXT): $(t_rsa_15_OBJECTS) $(t_rsa_15_DEPENDENCIES) $(EXTRA_t_rsa_15_DEPENDENCIES)
+ @rm -f t-rsa-15$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_rsa_15_OBJECTS) $(t_rsa_15_LDADD) $(LIBS)
+
+t-rsa-pss$(EXEEXT): $(t_rsa_pss_OBJECTS) $(t_rsa_pss_DEPENDENCIES) $(EXTRA_t_rsa_pss_DEPENDENCIES)
+ @rm -f t-rsa-pss$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_rsa_pss_OBJECTS) $(t_rsa_pss_LDADD) $(LIBS)
+
+t-rsa-testparm$(EXEEXT): $(t_rsa_testparm_OBJECTS) $(t_rsa_testparm_DEPENDENCIES) $(EXTRA_t_rsa_testparm_DEPENDENCIES)
+ @rm -f t-rsa-testparm$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_rsa_testparm_OBJECTS) $(t_rsa_testparm_LDADD) $(LIBS)
+
+t-secmem$(EXEEXT): $(t_secmem_OBJECTS) $(t_secmem_DEPENDENCIES) $(EXTRA_t_secmem_DEPENDENCIES)
+ @rm -f t-secmem$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_secmem_OBJECTS) $(t_secmem_LDADD) $(LIBS)
+
+t-sexp$(EXEEXT): $(t_sexp_OBJECTS) $(t_sexp_DEPENDENCIES) $(EXTRA_t_sexp_DEPENDENCIES)
+ @rm -f t-sexp$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_sexp_OBJECTS) $(t_sexp_LDADD) $(LIBS)
+
+t-x448$(EXEEXT): $(t_x448_OBJECTS) $(t_x448_DEPENDENCIES) $(EXTRA_t_x448_DEPENDENCIES)
+ @rm -f t-x448$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(t_x448_OBJECTS) $(t_x448_LDADD) $(LIBS)
+
+testapi$(EXEEXT): $(testapi_OBJECTS) $(testapi_DEPENDENCIES) $(EXTRA_testapi_DEPENDENCIES)
+ @rm -f testapi$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testapi_OBJECTS) $(testapi_LDADD) $(LIBS)
+
+testdrv$(EXEEXT): $(testdrv_OBJECTS) $(testdrv_DEPENDENCIES) $(EXTRA_testdrv_DEPENDENCIES)
+ @rm -f testdrv$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(testdrv_OBJECTS) $(testdrv_LDADD) $(LIBS)
+
+version$(EXEEXT): $(version_OBJECTS) $(version_DEPENDENCIES) $(EXTRA_version_DEPENDENCIES)
+ @rm -f version$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(version_OBJECTS) $(version_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aeswrap.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bench-slope.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curves.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsa-rfc6979.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fips186-dsa.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fipsdrv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gchash.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genhashdata.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashtest.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmac.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygrip.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpitests.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkbench.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkcs1v2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pubkey.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsacvt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-convert.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-cv25519.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-dsa.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-ecdsa.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-ed25519.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-ed448.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-mpi-bit.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-mpi-point.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-rsa-15.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-rsa-pss.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-rsa-testparm.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-secmem.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-sexp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-x448.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_kdf-t-kdf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_lock-t-lock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testapi.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testdrv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+t_kdf-t-kdf.o: t-kdf.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_kdf_CFLAGS) $(CFLAGS) -MT t_kdf-t-kdf.o -MD -MP -MF $(DEPDIR)/t_kdf-t-kdf.Tpo -c -o t_kdf-t-kdf.o `test -f 't-kdf.c' || echo '$(srcdir)/'`t-kdf.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/t_kdf-t-kdf.Tpo $(DEPDIR)/t_kdf-t-kdf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='t-kdf.c' object='t_kdf-t-kdf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_kdf_CFLAGS) $(CFLAGS) -c -o t_kdf-t-kdf.o `test -f 't-kdf.c' || echo '$(srcdir)/'`t-kdf.c
+
+t_kdf-t-kdf.obj: t-kdf.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_kdf_CFLAGS) $(CFLAGS) -MT t_kdf-t-kdf.obj -MD -MP -MF $(DEPDIR)/t_kdf-t-kdf.Tpo -c -o t_kdf-t-kdf.obj `if test -f 't-kdf.c'; then $(CYGPATH_W) 't-kdf.c'; else $(CYGPATH_W) '$(srcdir)/t-kdf.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/t_kdf-t-kdf.Tpo $(DEPDIR)/t_kdf-t-kdf.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='t-kdf.c' object='t_kdf-t-kdf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_kdf_CFLAGS) $(CFLAGS) -c -o t_kdf-t-kdf.obj `if test -f 't-kdf.c'; then $(CYGPATH_W) 't-kdf.c'; else $(CYGPATH_W) '$(srcdir)/t-kdf.c'; fi`
+
+t_lock-t-lock.o: t-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_lock_CFLAGS) $(CFLAGS) -MT t_lock-t-lock.o -MD -MP -MF $(DEPDIR)/t_lock-t-lock.Tpo -c -o t_lock-t-lock.o `test -f 't-lock.c' || echo '$(srcdir)/'`t-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/t_lock-t-lock.Tpo $(DEPDIR)/t_lock-t-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='t-lock.c' object='t_lock-t-lock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_lock_CFLAGS) $(CFLAGS) -c -o t_lock-t-lock.o `test -f 't-lock.c' || echo '$(srcdir)/'`t-lock.c
+
+t_lock-t-lock.obj: t-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_lock_CFLAGS) $(CFLAGS) -MT t_lock-t-lock.obj -MD -MP -MF $(DEPDIR)/t_lock-t-lock.Tpo -c -o t_lock-t-lock.obj `if test -f 't-lock.c'; then $(CYGPATH_W) 't-lock.c'; else $(CYGPATH_W) '$(srcdir)/t-lock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/t_lock-t-lock.Tpo $(DEPDIR)/t_lock-t-lock.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='t-lock.c' object='t_lock-t-lock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(t_lock_CFLAGS) $(CFLAGS) -c -o t_lock-t-lock.obj `if test -f 't-lock.c'; then $(CYGPATH_W) 't-lock.c'; else $(CYGPATH_W) '$(srcdir)/t-lock.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/aeswrap.Po
+ -rm -f ./$(DEPDIR)/basic.Po
+ -rm -f ./$(DEPDIR)/bench-slope.Po
+ -rm -f ./$(DEPDIR)/benchmark.Po
+ -rm -f ./$(DEPDIR)/curves.Po
+ -rm -f ./$(DEPDIR)/dsa-rfc6979.Po
+ -rm -f ./$(DEPDIR)/fips186-dsa.Po
+ -rm -f ./$(DEPDIR)/fipsdrv.Po
+ -rm -f ./$(DEPDIR)/gchash.Po
+ -rm -f ./$(DEPDIR)/genhashdata.Po
+ -rm -f ./$(DEPDIR)/hashtest.Po
+ -rm -f ./$(DEPDIR)/hmac.Po
+ -rm -f ./$(DEPDIR)/keygen.Po
+ -rm -f ./$(DEPDIR)/keygrip.Po
+ -rm -f ./$(DEPDIR)/mpitests.Po
+ -rm -f ./$(DEPDIR)/pkbench.Po
+ -rm -f ./$(DEPDIR)/pkcs1v2.Po
+ -rm -f ./$(DEPDIR)/prime.Po
+ -rm -f ./$(DEPDIR)/pubkey.Po
+ -rm -f ./$(DEPDIR)/random.Po
+ -rm -f ./$(DEPDIR)/rsacvt.Po
+ -rm -f ./$(DEPDIR)/t-convert.Po
+ -rm -f ./$(DEPDIR)/t-cv25519.Po
+ -rm -f ./$(DEPDIR)/t-dsa.Po
+ -rm -f ./$(DEPDIR)/t-ecdsa.Po
+ -rm -f ./$(DEPDIR)/t-ed25519.Po
+ -rm -f ./$(DEPDIR)/t-ed448.Po
+ -rm -f ./$(DEPDIR)/t-mpi-bit.Po
+ -rm -f ./$(DEPDIR)/t-mpi-point.Po
+ -rm -f ./$(DEPDIR)/t-rsa-15.Po
+ -rm -f ./$(DEPDIR)/t-rsa-pss.Po
+ -rm -f ./$(DEPDIR)/t-rsa-testparm.Po
+ -rm -f ./$(DEPDIR)/t-secmem.Po
+ -rm -f ./$(DEPDIR)/t-sexp.Po
+ -rm -f ./$(DEPDIR)/t-x448.Po
+ -rm -f ./$(DEPDIR)/t_kdf-t-kdf.Po
+ -rm -f ./$(DEPDIR)/t_lock-t-lock.Po
+ -rm -f ./$(DEPDIR)/testapi.Po
+ -rm -f ./$(DEPDIR)/testdrv.Po
+ -rm -f ./$(DEPDIR)/version.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/aeswrap.Po
+ -rm -f ./$(DEPDIR)/basic.Po
+ -rm -f ./$(DEPDIR)/bench-slope.Po
+ -rm -f ./$(DEPDIR)/benchmark.Po
+ -rm -f ./$(DEPDIR)/curves.Po
+ -rm -f ./$(DEPDIR)/dsa-rfc6979.Po
+ -rm -f ./$(DEPDIR)/fips186-dsa.Po
+ -rm -f ./$(DEPDIR)/fipsdrv.Po
+ -rm -f ./$(DEPDIR)/gchash.Po
+ -rm -f ./$(DEPDIR)/genhashdata.Po
+ -rm -f ./$(DEPDIR)/hashtest.Po
+ -rm -f ./$(DEPDIR)/hmac.Po
+ -rm -f ./$(DEPDIR)/keygen.Po
+ -rm -f ./$(DEPDIR)/keygrip.Po
+ -rm -f ./$(DEPDIR)/mpitests.Po
+ -rm -f ./$(DEPDIR)/pkbench.Po
+ -rm -f ./$(DEPDIR)/pkcs1v2.Po
+ -rm -f ./$(DEPDIR)/prime.Po
+ -rm -f ./$(DEPDIR)/pubkey.Po
+ -rm -f ./$(DEPDIR)/random.Po
+ -rm -f ./$(DEPDIR)/rsacvt.Po
+ -rm -f ./$(DEPDIR)/t-convert.Po
+ -rm -f ./$(DEPDIR)/t-cv25519.Po
+ -rm -f ./$(DEPDIR)/t-dsa.Po
+ -rm -f ./$(DEPDIR)/t-ecdsa.Po
+ -rm -f ./$(DEPDIR)/t-ed25519.Po
+ -rm -f ./$(DEPDIR)/t-ed448.Po
+ -rm -f ./$(DEPDIR)/t-mpi-bit.Po
+ -rm -f ./$(DEPDIR)/t-mpi-point.Po
+ -rm -f ./$(DEPDIR)/t-rsa-15.Po
+ -rm -f ./$(DEPDIR)/t-rsa-pss.Po
+ -rm -f ./$(DEPDIR)/t-rsa-testparm.Po
+ -rm -f ./$(DEPDIR)/t-secmem.Po
+ -rm -f ./$(DEPDIR)/t-sexp.Po
+ -rm -f ./$(DEPDIR)/t-x448.Po
+ -rm -f ./$(DEPDIR)/t_kdf-t-kdf.Po
+ -rm -f ./$(DEPDIR)/t_lock-t-lock.Po
+ -rm -f ./$(DEPDIR)/testapi.Po
+ -rm -f ./$(DEPDIR)/testdrv.Po
+ -rm -f ./$(DEPDIR)/version.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-generic clean-libtool \
+ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Force sequential run of some tests.
+bench-slope.log: benchmark.log
+hashtest-256g.log: bench-slope.log
+
+# Build a version of the test driver for the build platform.
+testdrv-build: testdrv.c
+ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) \
+ $(CPPFLAGS_FOR_BUILD) -DTESTDRV_EXEEXT=\"$(EXEEXT)\" \
+ -o $@ $(srcdir)/testdrv.c
+
+# xcheck uses our new testdrv instead of the automake test runner.
+.PHONY: xcheck xtestsuite
+xcheck: testdrv$(EXEEXT)
+ srcdir=$(srcdir) ./testdrv$(EXEEXT) --verbose
+
+# Make a tarballs with all the tests.
+xtestsuite: testdrv$(EXEEXT) testdrv-build $(TESTS)
+ +(set -e; \
+ name="$(PACKAGE_TARNAME)-tests-$(PACKAGE_VERSION)";\
+ xname="$$name/$(host)" ;\
+ rm -rf $$name; mkdir $$name ; mkdir $$xname ;\
+ cp -L $(xtestsuite_driver) \
+ $$(srcdir=$(srcdir) ./testdrv-build --files|sort|uniq) $$xname/ ;\
+ cp -P $(xtestsuite_libs) $$xname/ ;\
+ touch $$xname/libgcrypt-standalone-tests ;\
+ $(AMTAR) czf "$(PACKAGE_TARNAME)-tests-$(PACKAGE_VERSION)".tar.gz \
+ $$name ;\
+ )
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
if (err)
{
fail ("gcry_cipher_setkey failed: %s\n", gpg_strerror (err));
+ gcry_cipher_close (hd);
return;
}
if (err)
{
fail ("gcry_cipher_encrypt failed: %s\n", gpg_strerror (err));
+ gcry_cipher_close (hd);
return;
}
if (err)
{
fail ("gcry_cipher_decrypt failed: %s\n", gpg_strerror (err));
+ gcry_cipher_close (hd);
return;
}
if (err)
{
fail ("gcry_cipher_decrypt(2) failed: %s\n", gpg_strerror (err));
+ gcry_cipher_close (hd);
return;
}
if (err)
{
fail ("gcry_cipher_decrypt(3) failed: %s\n", gpg_strerror (err));
+ gcry_cipher_close (hd);
return;
}
}
test_spec_pubkey_t;
-#define FLAG_CRYPT (1 << 0)
-#define FLAG_SIGN (1 << 1)
-#define FLAG_GRIP (1 << 2)
-#define FLAG_NOFIPS (1 << 3)
-#define FLAG_CFB8 (1 << 4)
+#define FLAG_CRYPT (1 << 0)
+#define FLAG_SIGN (1 << 1)
+#define FLAG_GRIP (1 << 2)
+#define FLAG_NOFIPS (1 << 3)
+#define FLAG_CFB8 (1 << 4)
+#define FLAG_SPECIAL (1 << 5)
static int in_fips_mode;
if (!keylen)
{
fail ("cipher-ccm, gcry_cipher_get_algo_keylen failed\n");
+ gcry_cipher_close (hde);
+ gcry_cipher_close (hdd);
return;
}
if (!blklen)
{
fail ("cipher-ccm, gcry_cipher_get_algo_blklen failed\n");
+ gcry_cipher_close (hde);
+ gcry_cipher_close (hdd);
return;
}
const size_t buflen = 128 * 16;
unsigned char *inbuf, *outbuf;
gpg_error_t err = 0;
- gcry_cipher_hd_t hde, hde2, hdd;
+ gcry_cipher_hd_t hde = NULL, hde2 = NULL, hdd = NULL;
unsigned char tag[16];
unsigned char tag2[16];
unsigned char tag3[16];
return;
}
outbuf = xmalloc(buflen);
- if (!inbuf)
+ if (!outbuf)
{
fail ("out-of-memory\n");
xfree(inbuf);
err = gcry_cipher_open (&hdd, algo, GCRY_CIPHER_MODE_OCB, 0);
if (err)
{
+ gcry_cipher_close (hde);
+ gcry_cipher_close (hde2);
fail ("cipher-ocb, gcry_cipher_open failed (checksum, algo %d): %s\n",
algo, gpg_strerror (err));
goto out_free;
{
fail ("cipher-xts, gcry_cipher_open failed (tv %d): %s\n",
tidx, gpg_strerror (err));
+ gcry_cipher_close (hde);
return;
}
if (err)
{
fail ("gost28147, gcry_cipher_open failed: %s\n", gpg_strerror (err));
+ gcry_cipher_close (hde);
+ gcry_cipher_close (hdd);
return;
}
{
if (in_fips_mode)
{
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_MD, algos[i].md);
+ if (err == GPG_ERR_NO_ERROR)
+ {
+ fail ("algo %d, gcry_md_test_algo failed while it should"
+ " have worked in FIPS mode\n", algos[i].md);
+ }
if (verbose)
fprintf (stderr, " algorithm %d not available in fips mode\n",
algos[i].md);
#endif /* USE_GOST28147 */
{ 0 },
};
+ gcry_error_t err;
int i;
if (verbose)
{
if (in_fips_mode)
{
+ err = gcry_control(GCRYCTL_FIPS_SERVICE_INDICATOR_MAC, algos[i].algo);
+ if (err == GPG_ERR_NO_ERROR)
+ {
+ fail ("algo %d, gcry_mac_test_algo failed while it should"
+ " have worked in FIPS mode\n", algos[i].algo);
+ }
if (verbose)
fprintf (stderr, " algorithm %d not available in fips mode\n",
algos[i].algo);
const char *data;
int algo;
int expected_rc;
+ int flags;
} datas[] =
{
{ "(data\n (flags pkcs1)\n"
" (random-override #4253647587980912233445566778899019283747#))\n",
GCRY_PK_RSA,
0 },
+ { "(data\n (flags pss)\n"
+ " (hash-algo sha256)\n"
+ " (value #11223344556677889900AABBCCDDEEFF#)\n"
+ " (salt-length 2:32)\n"
+ " (random-override #42536475879809122334455667788990192837465564738291"
+ "00122334455667#))\n",
+ GCRY_PK_RSA,
+ 0 },
+ { "(data\n (flags pss)\n"
+ " (hash-algo sha256)\n"
+ " (value #11223344556677889900AABBCCDDEEFF#)\n"
+ " (salt-length 2:33)\n"
+ " (random-override #42536475879809122334455667788990192837465564738291"
+ "0012233445566778#))\n",
+ GCRY_PK_RSA,
+ 0, FLAG_NOFIPS },
{ NULL }
};
die ("converting data failed: %s\n", gpg_strerror (rc));
rc = gcry_pk_sign (&sig, hash, skey);
- if (in_fips_mode && (flags & FLAG_NOFIPS))
+ if (in_fips_mode && (flags & FLAG_NOFIPS || datas[dataidx].flags & FLAG_NOFIPS))
{
if (!rc)
fail ("gcry_pk_sign did not fail as expected in FIPS mode\n");
int unpadded;
int encrypt_expected_rc;
int decrypt_expected_rc;
- int special;
+ int flags;
} datas[] =
{
{ GCRY_PK_RSA,
NULL,
0,
0,
- 0 },
+ 0,
+ FLAG_NOFIPS },
{ GCRY_PK_RSA,
"(data\n (flags pkcs1)\n"
" (value #11223344556677889900AA#))\n",
"(flags pkcs1)",
1,
0,
- 0 },
+ 0,
+ FLAG_NOFIPS },
{ GCRY_PK_RSA,
"(data\n (flags oaep)\n"
" (value #11223344556677889900AA#))\n",
"(flags oaep)",
1,
0,
- 0 },
+ 0,
+ FLAG_NOFIPS },
{ GCRY_PK_RSA,
"(data\n (flags oaep)\n (hash-algo sha1)\n"
" (value #11223344556677889900AA#))\n",
"(flags oaep)(hash-algo sha1)",
1,
0,
- 0 },
+ 0,
+ FLAG_NOFIPS },
{ GCRY_PK_RSA,
"(data\n (flags oaep)\n (hash-algo sha1)\n (label \"test\")\n"
" (value #11223344556677889900AA#))\n",
"(flags oaep)(hash-algo sha1)(label \"test\")",
1,
0,
- 0 },
+ 0,
+ FLAG_NOFIPS },
{ GCRY_PK_RSA,
"(data\n (flags oaep)\n (hash-algo sha1)\n (label \"test\")\n"
" (value #11223344556677889900AA#)\n"
"(flags oaep)(hash-algo sha1)(label \"test\")",
1,
0,
- 0 },
+ 0,
+ FLAG_NOFIPS },
{ 0,
"(data\n (flags )\n" " (value #11223344556677889900AA#))\n",
NULL,
"(flags oaep)",
1,
0,
- GPG_ERR_ENCODING_PROBLEM, 1 },
+ GPG_ERR_ENCODING_PROBLEM, FLAG_SPECIAL },
{ GCRY_PK_RSA,
"(data\n (flags oaep)\n"
" (value #11223344556677889900AA#))\n",
"(flags pkcs1)",
1,
0,
- GPG_ERR_ENCODING_PROBLEM, 1 },
+ GPG_ERR_ENCODING_PROBLEM, FLAG_SPECIAL | FLAG_NOFIPS },
{ 0,
"(data\n (flags pss)\n"
" (value #11223344556677889900AA#))\n",
die ("converting data failed: %s\n", gpg_strerror (rc));
rc = gcry_pk_encrypt (&ciph, data, pkey);
- if (in_fips_mode && (flags & FLAG_NOFIPS))
+ if (in_fips_mode && ((flags & FLAG_NOFIPS) ||
+ (datas[dataidx].flags & FLAG_NOFIPS)))
{
if (!rc)
fail ("gcry_pk_encrypt did not fail as expected in FIPS mode\n");
ciph = list;
}
rc = gcry_pk_decrypt (&plain, ciph, skey);
- if (!rc && datas[dataidx].special == 1)
+ if ((!rc || in_fips_mode) && (datas[dataidx].flags & FLAG_SPECIAL))
{
/* It may happen that OAEP formatted data which is
decrypted as pkcs#1 data returns a valid pkcs#1
if (mode->algo == GCRY_KDF_PBKDF2)
{
- obj->min_bufsize = 2;
- obj->max_bufsize = 2 * 32;
- obj->step_size = 2;
+ int n = in_fips_mode ? 1000 : 2;
+
+ obj->min_bufsize = n;
+ obj->max_bufsize = n * 32;
+ obj->step_size = n;
}
obj->num_measure_repetitions = num_measurement_repetitions;
if (mode->algo == GCRY_KDF_PBKDF2)
{
- gcry_kdf_derive("qwerty", 6, mode->algo, mode->subalgo, "01234567", 8,
- buflen, sizeof(keybuf), keybuf);
+ gcry_kdf_derive("qwertyuiop", 10, mode->algo, mode->subalgo,
+ "0123456789ABCDEF", 16,
+ buflen, sizeof(keybuf), keybuf);
}
}
switch (oper->algo)
{
default:
- return -1;
+ gcry_mpi_release (x);
+ free (hd);
+ return -1;
case ECC_ALGO_ED25519:
err = gcry_sexp_build (&hd->key_spec, NULL,
+++ /dev/null
-/* fipsrngdrv.c - A driver to test the FIPS RNG.
- Copyright (C) 2008 Free Software Foundation, Inc.
-
- This file is part of Libgcrypt.
-
- Libgcrypt is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of
- the License, or (at your option) any later version.
-
- Libgcrypt is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this program; if not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <ctype.h>
-#ifndef HAVE_W32_SYSTEM
-# include <signal.h>
-#endif
-
-#include <gcrypt.h>
-
-#define PGM "fipsrngdrv"
-
-#define my_isascii(c) (!((c) & 0x80))
-#define digitp(p) (*(p) >= '0' && *(p) <= '9')
-#define hexdigitp(a) (digitp (a) \
- || (*(a) >= 'A' && *(a) <= 'F') \
- || (*(a) >= 'a' && *(a) <= 'f'))
-#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
- *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-static void
-die (const char *format, ...)
-{
- va_list arg_ptr;
-
- va_start (arg_ptr, format);
- fputs (PGM ": ", stderr);
- vfprintf (stderr, format, arg_ptr);
- va_end (arg_ptr);
- exit (1);
-}
-
-
-/* Convert STRING consisting of hex characters into its binary
- representation and store that at BUFFER. BUFFER needs to be of
- LENGTH bytes. The function checks that the STRING will convert
- exactly to LENGTH bytes. The string is delimited by either end of
- string or a white space character. The function returns -1 on
- error or the length of the parsed string. */
-static int
-hex2bin (const char *string, void *buffer, size_t length)
-{
- int i;
- const char *s = string;
-
- for (i=0; i < length; )
- {
- if (!hexdigitp (s) || !hexdigitp (s+1))
- return -1; /* Invalid hex digits. */
- ((unsigned char*)buffer)[i++] = xtoi_2 (s);
- s += 2;
- }
- if (*s && (!my_isascii (*s) || !isspace (*s)) )
- return -1; /* Not followed by Nul or white space. */
- if (i != length)
- return -1; /* Not of expected length. */
- if (*s)
- s++; /* Skip the delimiter. */
- return s - string;
-}
-
-
-
-
-static gcry_error_t
-init_external_test (void **r_context,
- unsigned int flags,
- const void *key, size_t keylen,
- const void *seed, size_t seedlen,
- const void *dt, size_t dtlen)
-{
- return gcry_control (58,
- r_context, flags,
- key, keylen,
- seed, seedlen,
- dt, dtlen);
-}
-
-static gcry_error_t
-run_external_test (void *context, void *buffer, size_t buflen)
-{
- return gcry_control (59, context, buffer, buflen);
-}
-
-static void
-deinit_external_test (void *context)
-{
- xgcry_control ((60, context));
-}
-
-
-static void
-print_buffer (const unsigned char *buffer, size_t length)
-{
- while (length--)
- printf ("%02X", *buffer++);
-}
-
-
-int
-main (int argc, char **argv)
-{
- int last_argc = -1;
- int verbose = 0;
- int binary = 0;
- int loop = 0;
- int progress = 0;
- int no_fips = 0;
- unsigned char key[16];
- unsigned char seed[16];
- unsigned char dt[16];
- void *context;
- gpg_error_t err;
- unsigned char buffer[16];
-
- if (argc)
- { argc--; argv++; }
-
- while (argc && last_argc != argc )
- {
- last_argc = argc;
- if (!strcmp (*argv, "--"))
- {
- argc--; argv++;
- break;
- }
- else if (!strcmp (*argv, "--help"))
- {
- fputs ("usage: " PGM
- " [--verbose] [--binary] [--loop] [--progress] KEY V DT\n",
- stdout);
- exit (0);
- }
- else if (!strcmp (*argv, "--verbose"))
- {
- verbose++;
- argc--; argv++;
- }
- else if (!strcmp (*argv, "--no-fips"))
- {
- no_fips++;
- argc--; argv++;
- }
- else if (!strcmp (*argv, "--binary"))
- {
- binary = 1;
- argc--; argv++;
- }
- else if (!strcmp (*argv, "--loop"))
- {
- loop = 1;
- argc--; argv++;
- }
- else if (!strcmp (*argv, "--progress"))
- {
- progress = 1;
- argc--; argv++;
- }
- }
-
- if (!argc)
- {
- memcpy (key, "1234567890123456", 16);
- memcpy (seed, "abcdefghijklmnop", 16);
- memcpy (dt, "XXXXXXXXXXXXXXXX", 16);
- }
- else if (argc == 3)
- {
- if ( hex2bin (argv[0], key, 16) < 0
- || hex2bin (argv[1], seed, 16) < 0
- || hex2bin (argv[2], dt, 16) < 0 )
- die ("args are not 32 hex digits each\n");
- }
- else
- die ("invalid usage (try --help)\n");
-
-#ifndef HAVE_W32_SYSTEM
- if (loop)
- signal (SIGPIPE, SIG_IGN);
-#endif
-
- if (verbose)
- fputs (PGM ": started\n", stderr);
-
- xgcry_control ((GCRYCTL_SET_VERBOSITY, (int)verbose));
- if (!no_fips)
- xgcry_control ((GCRYCTL_FORCE_FIPS_MODE, 0));
- if (!gcry_check_version ("1.4.3"))
- die ("version mismatch\n");
- xgcry_control ((GCRYCTL_DISABLE_SECMEM, 0));
- xgcry_control ((GCRYCTL_INITIALIZATION_FINISHED, 0));
-
- /* The flag value 1 disables the dup check, so that the RNG returns
- all generated data. */
- err = init_external_test (&context, 1, key, 16, seed, 16, dt, 16);
- if (err)
- die ("init external test failed: %s\n", gpg_strerror (err));
-
- do
- {
- int writerr = 0;
-
- err = run_external_test (context, buffer, sizeof buffer);
- if (err)
- die ("run external test failed: %s\n", gpg_strerror (err));
- if (binary)
- {
- if (fwrite (buffer, 16, 1, stdout) != 1)
- writerr = 1;
- else
- fflush (stdout);
- }
- else
- {
- print_buffer (buffer, sizeof buffer);
- if (putchar ('\n') == EOF)
- writerr = 1;
- }
- if (writerr)
- {
-#ifndef HAVE_W32_SYSTEM
- if (loop && errno == EPIPE)
- break;
-#endif
- die ("writing output failed: %s\n", strerror (errno));
- }
-
- if (progress)
- {
- putc ('.', stderr);
- fflush (stderr);
- }
- }
- while (loop);
-
- if (progress)
- putc ('\n', stderr);
-
- deinit_external_test (context);
-
- if (verbose)
- fputs (PGM ": ready\n", stderr);
-
- return 0;
-}
err = gcry_pk_encrypt (&ciph, plain, pub_key);
if (err)
{
+ if (in_fips_mode)
+ {
+ gcry_sexp_release (plain);
+ plain = NULL;
+ continue;
+ }
show_sexp ("plain:\n", ciph);
fail ("gcry_pk_encrypt failed: %s\n", gpg_strerror (err));
}
else
{
+ if (in_fips_mode)
+ {
+ fail ("The OAEP encryption unexpectedly worked in FIPS mode\n");
+ gcry_sexp_release (plain);
+ plain = NULL;
+ continue;
+ }
if (extract_cmp_data (ciph, "a", tbl[tno].m[mno].encr,
tbl[tno].m[mno].desc))
{
gcry_free (seed);
err = gcry_pk_encrypt (&ciph, plain, pub_key);
- if (err)
+ if (in_fips_mode)
+ {
+ if (!err)
+ {
+ fail ("gcry_pk_encrypt should have failed in FIPS mode:\n");
+ }
+ gcry_sexp_release (plain);
+ plain = NULL;
+ gcry_sexp_release (ciph);
+ ciph = NULL;
+ continue;
+ }
+ else if (err)
{
show_sexp ("plain:\n", ciph);
fail ("gcry_pk_encrypt failed: %s\n", gpg_strerror (err));
+++ /dev/null
-#! /usr/bin/awk -f
-# pkcstv2c.awk - Convert pkcs1 test vectors into a C table.
-# Copyright 2011 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This file is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-
-BEGIN {
- in_key = 0;
- in_item = 0;
- in_number = 0;
- no_comma = 0;
-
- printf " static struct {\n";
- printf " const char *desc;\n";
- printf " const char *n, *e, *d;\n";
- printf " struct {\n";
- printf " const char *desc;\n";
- printf " const char *mesg;\n";
- printf " const char *seed;\n";
- printf " const char *encr;\n";
- printf " } m[20];\n";
- printf " } tbl[] =\n";
- printf " {\n";
-}
-
-{ sub (/\r/,""); }
-
-/^# Public key/ { skip_pub = 1; }
-/^# Private key/ { skip_pub = 0; }
-skip_pub { next }
-
-in_number && ! /^[0-9a-f]/ {
- if (in_number == 2)
- printf "\"";
- if (no_comma)
- no_comma = 0;
- else
- printf ","
- printf "\n";
- in_number = 0;
-}
-
-in_number == 3 {
- printf "\n";
- in_number = 1;
-}
-
-in_number == 1 {
- gsub (/ /,"")
- printf "%*s\"%s", indent, "", $0;
- in_number = 2;
- next;
-}
-
-in_number == 2 {
- gsub (/ /,"")
- printf "%s\"", $0;
- in_number = 3;
- next;
-}
-
-/^#.*Example.*key pair/ {
- if (in_item) {
- printf " }\n }\n },\n";
- in_item = 0;
- }
- in_key = 1;
- indent = 6;
- printf " {\n \"%s\",\n", gensub(/.*: (A .*)/, "\\1", "g");
- next
-}
-
-/^# PKCS#1 .*Example/ {
- if (in_key) {
- printf " {\n";
- in_key = 0;
- }
- if (in_item)
- printf " },{\n";
- else
- printf " {\n";
- in_item = 1;
- indent = 10;
- printf " \"%s\",\n", gensub(/^# (.*)/, "\\1", "g");
- next
-}
-
-(in_key || in_item) && /^# (Modulus|Public|Exponent|Message|Seed)/ {
- # printf "/* %s */\n", $0;
- in_number = 1;
- next
-}
-(in_key || in_item) && /^# (Signature|Encryption)/ {
- # printf "/* %s */\n", $0;
- in_number = 1;
- no_comma = 1;
- next
-}
-
-END {
- if (in_item) {
- printf " }\n }\n }\n };\n";
- in_item = 0;
- }
-}
\ No newline at end of file
rc = gcry_pk_genkey (&key, key_spec);
gcry_sexp_release (key_spec);
if (rc)
- die ("error generating RSA key: %s\n", gcry_strerror (rc));
+ {
+ if (in_fips_mode)
+ {
+ if (verbose)
+ fprintf (stderr, "The X9.31 RSA keygen is not available in FIPS modee.\n");
+ return;
+ }
+ die ("error generating RSA key: %s\n", gcry_strerror (rc));
+ }
+ else if (in_fips_mode)
+ die ("generating X9.31 RSA key unexpected worked in FIPS mode\n");
if (verbose > 1)
show_sexp ("generated RSA (X9.31) key:\n", key);
if (verbose)
fprintf (stderr, "Checking generated RSA key (X9.31).\n");
get_keys_x931_new (&pkey, &skey);
- check_keys (pkey, skey, 800, 0);
+ if (!in_fips_mode)
+ check_keys (pkey, skey, 800, 0);
gcry_sexp_release (pkey);
gcry_sexp_release (skey);
pkey = skey = NULL;
gcry_mpi_t mpi_k = NULL;
gcry_mpi_t mpi_x = NULL;
gcry_mpi_point_t P = NULL;
- gcry_mpi_point_t Q;
+ gcry_mpi_point_t Q = NULL;
int i;
gcry_mpi_t mpi_kk = NULL;
testno);
if (verbose > 1)
info ("not executed in FIPS mode\n");
- return;
+ goto leave;
}
Q = gcry_mpi_point_new (0);
for (s=string; *s; s +=2 )
{
if (!hexdigitp (s) || !hexdigitp (s+1))
- return NULL; /* Invalid hex digits. */
+ {
+ xfree (buffer);
+ return NULL; /* Invalid hex digits. */
+ }
((unsigned char*)buffer)[length++] = xtoi_2 (s);
}
*r_length = length;
for (; *s; s +=2 )
{
if (!hexdigitp (s) || !hexdigitp (s+1))
- return NULL; /* Invalid hex digits. */
+ {
+ xfree (buffer);
+ return NULL; /* Invalid hex digits. */
+ }
buffer[length++] = xtoi_2 (s);
}
*r_length = length;
gcry_ctx_t ctx = NULL;
int md_algo;
const char *data_tmpl;
+ char data_tmpl2[256];
gcry_md_hd_t hd = NULL;
gcry_sexp_t s_pk = NULL;
gcry_sexp_t s_sk = NULL;
- gcry_sexp_t s_sig= NULL;
+ gcry_sexp_t s_sig = NULL, s_sig2 = NULL;
gcry_sexp_t s_tmp, s_tmp2;
unsigned char *out_r = NULL;
unsigned char *out_s = NULL;
goto leave;
}
+ if (snprintf (data_tmpl2, sizeof(data_tmpl2),
+ "(data(flags raw)(hash %s %%b)(label %%b))",
+ gcry_md_algo_name(md_algo)) >= sizeof(data_tmpl2))
+ {
+ fail ("snprintf out of bounds");
+ goto leave;
+ }
+ err = gcry_pk_hash_sign (&s_sig2, data_tmpl2, s_sk, hd, ctx);
+ if (err)
+ {
+ fail ("gcry_pk_hash_sign with explicit hash algorithm %s failed: %s",
+ gcry_md_algo_name (md_algo), gpg_strerror (err));
+ goto leave;
+ }
+
out_r_len = out_s_len = 0;
out_s = out_r = NULL;
s_tmp2 = NULL;
if (err)
fail ("gcry_pk_hash_verify failed for test: %s",
gpg_strerror (err));
+
+ err = gcry_pk_hash_verify (s_sig2, data_tmpl2, s_pk, hd, ctx);
+ if (err)
+ fail ("gcry_pk_hash_verify with explicit hash algorithm %s failed: %s",
+ gcry_md_algo_name (md_algo), gpg_strerror (err));
}
leave:
gcry_ctx_release (ctx);
gcry_sexp_release (s_sig);
+ gcry_sexp_release (s_sig2);
gcry_sexp_release (s_sk);
gcry_sexp_release (s_pk);
if (hd)
xfree (out_s);
xfree (sig_r_string);
xfree (sig_s_string);
+ xfree (pkbuffer);
}
"\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9"
"\xb5\x24\xaf\x60\x12\x06\x2f\xe0\x37\xa6"
},
+ {
+ "password", 8,
+ "salt", 4,
+ GCRY_MD_SHA1,
+ 1,
+ 10, /* too short dklen for FIPS */
+ "\x0c\x60\xc8\x0f\x96\x1f\x0e\x71\xf3\xa9"
+ },
{
"password", 8,
"salt", 4,
GCRY_KDF_PBKDF2, tv[tvidx].hashalgo,
tv[tvidx].salt, tv[tvidx].saltlen,
tv[tvidx].c, tv[tvidx].dklen, outbuf);
- if (in_fips_mode && tvidx > 6)
+ if (in_fips_mode && tvidx > 7)
{
if (!err)
fail ("pbkdf2 test %d unexpectedly passed in FIPS mode: %s\n",
}
if (err)
{
- if (in_fips_mode && tv[tvidx].plen < 14)
+ if (in_fips_mode && (tv[tvidx].plen < 14 || tv[tvidx].dklen < 14))
{
if (verbose)
fprintf (stderr,
}
+static void
+check_fips_indicators (void)
+{
+ enum gcry_kdf_algos fips_kdf_algos[] = {
+ GCRY_KDF_PBKDF2,
+ };
+ enum gcry_kdf_algos kdf_algos[] = {
+ GCRY_KDF_SIMPLE_S2K,
+ GCRY_KDF_SALTED_S2K,
+ GCRY_KDF_ITERSALTED_S2K,
+ GCRY_KDF_PBKDF1,
+ GCRY_KDF_PBKDF2,
+ GCRY_KDF_SCRYPT,
+ GCRY_KDF_ARGON2
+ };
+ size_t i, j;
+
+ for (i = 0; i < sizeof(kdf_algos) / sizeof(*kdf_algos); i++)
+ {
+ int is_fips_kdf_algo = 0;
+ gcry_error_t err = gcry_control (GCRYCTL_FIPS_SERVICE_INDICATOR_KDF, kdf_algos[i]);
+
+ if (verbose)
+ fprintf (stderr, "checking FIPS indicator for KDF %d: %s\n",
+ kdf_algos[i], gcry_strerror (err));
+
+ for (j = 0; j < sizeof(fips_kdf_algos) / sizeof(*fips_kdf_algos); j++)
+ {
+ if (kdf_algos[i] == fips_kdf_algos[j])
+ {
+ is_fips_kdf_algo = 1;
+ break;
+ }
+ }
+
+ switch (err & GPG_ERR_CODE_MASK)
+ {
+ case GPG_ERR_NO_ERROR:
+ if (!is_fips_kdf_algo)
+ fail ("KDF algorithm %d is marked as approved by"
+ " GCRYCTL_FIPS_SERVICE_INDICATOR_KDF, but only PBKDF2 should"
+ " be marked as approved.", kdf_algos[i]);
+ break;
+ case GPG_ERR_NOT_SUPPORTED:
+ if (is_fips_kdf_algo)
+ fail ("KDF algorithm %d is marked as not approved by"
+ " GCRYCTL_FIPS_SERVICE_INDICATOR_KDF, but it should be"
+ " approved", kdf_algos[i]);
+ break;
+ default:
+ fail ("Unexpected error '%s' (%d) returned by"
+ " GCRYCTL_FIPS_SERVICE_INDICATOR_KDF for KDF algorithm %d",
+ gcry_strerror (err), err, kdf_algos[i]);
+ }
+ }
+}
+
+
int
main (int argc, char **argv)
{
check_pbkdf2 ();
check_scrypt ();
check_argon2 ();
+ if (in_fips_mode)
+ check_fips_indicators();
}
return error_count ? 1 : 0;
};
gpg_error_t err;
gcry_ctx_t ctx;
- gcry_mpi_t k, x, y;
- gcry_mpi_point_t G, Q;
+ gcry_mpi_t k = NULL, x = NULL, y = NULL;
+ gcry_mpi_point_t G = NULL, Q = NULL;
int idx;
for (idx = 0; tv[idx].curve; idx++)
{
fail ("tv[%d].'%s': error getting point parameter 'g'\n",
idx, tv[idx].curve);
- return;
+ goto err;
}
if (tv[idx].k_base10)
{
fail ("tv[%d].'%s': failed to get affine coordinates\n",
idx, tv[idx].curve);
- return;
+ goto err;
}
if (cmp_mpihex (x, tv[idx].qx) || cmp_mpihex (y, tv[idx].qy))
printf ("expected Qy: %s\n", tv[idx].qy);
}
+err:
gcry_mpi_release (k);
gcry_mpi_release (y);
gcry_mpi_release (x);
{
fail ("tv[%d].'%s': failed to get affine coordinates\n",
idx, tv[idx].curve);
- return;
+ goto out;
}
if ((tv[idx].qx != NULL && tv[idx].qy != NULL)
printf ("expected Qy: %s\n", tv[idx].qy);
}
+out:
gcry_mpi_release (uy);
gcry_mpi_release (ux);
gcry_mpi_release (uz);
for (s=string; *s; s +=2 )
{
if (!hexdigitp (s) || !hexdigitp (s+1))
- return NULL; /* Invalid hex digits. */
+ {
+ xfree (buffer);
+ return NULL; /* Invalid hex digits. */
+ }
((unsigned char*)buffer)[length++] = xtoi_2 (s);
}
*r_length = length;
for (s=string; *s; s +=2 )
{
if (!hexdigitp (s) || !hexdigitp (s+1))
- return NULL; /* Invalid hex digits. */
+ {
+ xfree (buffer);
+ return NULL; /* Invalid hex digits. */
+ }
((unsigned char*)buffer)[length++] = xtoi_2 (s);
}
*r_length = length;
snprintf (p, 3, "%02x", out[i]);
if (strcmp (sig_string, s))
{
- fail ("gcry_pkhash_sign failed: %s",
+ fail ("gcry_pk_hash_sign failed: %s",
"wrong value returned");
info (" expected: '%s'", s);
info (" got: '%s'", sig_string);
--- /dev/null
+/* t-rsa-testparm.c - Check the RSA Key Generation test-parm parameter
+ * Copyright (C) 2022 g10 Code GmbH
+ *
+ * This file is part of Libgcrypt.
+ *
+ * Libgcrypt is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * Libgcrypt is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gcrypt.h>
+
+#include "stopwatch.h"
+
+#define PGM "t-rsa-testparm"
+#include "t-common.h"
+
+
+static void
+check_rsa_testparm (void)
+{
+ gpg_error_t err;
+ gcry_sexp_t keyspec = NULL;
+ gcry_sexp_t key = NULL;
+ const char *sexp = "(genkey (rsa (nbits \"2048\") (test-parms "
+ "(e \"65537\")"
+ "(p #00bbccabcee15d343944a47e492d4b1f4de79633e20cbb46f7d2d6813392a807ad048"
+ "cf77528edd19f77e7453f25173b9dcb70423afa2037aae147b81a33d541fc58f875ef"
+ "f1e852ab55e2e09a3debfbc151b3b0d17fef6f74d81fca14fbae531418e211ef81859"
+ "2af70de5cec3b92795cc3578572bf456099cd8727150e523261#)"
+ "(q #00ca87ecf2883f4ed00a9ec65abdeba81d28edbfcc34ecc563d587f166b52d42bfbe2"
+ "2bbc095b0b8426a2f8bbc55baaa8859b42cbc376ed3067db3ef7b135b63481322911e"
+ "bbd7014db83aa051e0ca2dbf302b75cd37f2ae8df90e134226e92f6353a284b28bb30"
+ "af0bbf925b345b955328379866ebac11d55bc80fe84f105d415#)"
+ ")))";
+
+ info ("Checking RSA KeyGen test-parm parameter.\n");
+
+ err = gcry_sexp_build (&keyspec, NULL, sexp);
+ if (err)
+ {
+ fail ("error building SEXP for test: %s", gpg_strerror (err));
+ goto leave;
+ }
+
+ err = gcry_pk_genkey (&key, keyspec);
+ if (err)
+ {
+ fail ("gcry_pk_genkey failed for test: %s", gpg_strerror (err));
+ goto leave;
+ }
+
+leave:
+ if (key)
+ gcry_sexp_release (key);
+ if (keyspec)
+ gcry_sexp_release (keyspec);
+}
+
+
+int
+main (int argc, char **argv)
+{
+ int last_argc = -1;
+
+ if (argc)
+ { argc--; argv++; }
+
+ while (argc && last_argc != argc )
+ {
+ last_argc = argc;
+ if (!strcmp (*argv, "--"))
+ {
+ argc--; argv++;
+ break;
+ }
+ else if (!strcmp (*argv, "--help"))
+ {
+ fputs ("usage: " PGM " [options]\n"
+ "Options:\n"
+ " --verbose print timings etc.\n"
+ " --debug flyswatter\n",
+ stdout);
+ exit (0);
+ }
+ else if (!strcmp (*argv, "--verbose"))
+ {
+ verbose++;
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "--debug"))
+ {
+ verbose += 2;
+ debug++;
+ argc--; argv++;
+ }
+ else if (!strncmp (*argv, "--", 2))
+ die ("unknown option '%s'", *argv);
+
+ }
+
+ xgcry_control ((GCRYCTL_DISABLE_SECMEM, 0));
+ if (!gcry_check_version (GCRYPT_VERSION))
+ die ("version mismatch\n");
+ if (debug)
+ xgcry_control ((GCRYCTL_SET_DEBUG_FLAGS, 0xffffffff, 0));
+
+ start_timer ();
+ check_rsa_testparm ();
+ stop_timer ();
+
+ info ("All tests completed in %s. Errors: %d\n",
+ elapsed_time (1), error_count);
+ return !!error_count;
+}
gcry_mpi_t mpi_k = NULL;
gcry_mpi_t mpi_x = NULL;
gcry_mpi_point_t P = NULL;
- gcry_mpi_point_t Q;
+ gcry_mpi_point_t Q = NULL;
int i;
gcry_mpi_t mpi_kk = NULL;
testno);
if (verbose > 1)
info ("not executed in FIPS mode\n");
- return;
+ goto leave;
}
Q = gcry_mpi_point_new (0);
*pid = fork ();
if (*pid == MYINVALID_PID)
{
+ xfree (arg_list);
fail ("error forking process: %s\n", strerror (errno));
return -1;
}
/* Assign /dev/null to stdin. */
fd = open ("/dev/null", O_RDONLY);
if (fd == -1)
- die ("failed to open '%s': %s\n", "/dev/null", strerror (errno));
+ {
+ xfree (arg_list);
+ die ("failed to open '%s': %s\n", "/dev/null", strerror (errno));
+ }
if (fd != 0 && dup2 (fd, 0) == -1)
- die ("dup2(%d,0) failed: %s\n", fd, strerror (errno));
+ {
+ xfree (arg_list);
+ die ("dup2(%d,0) failed: %s\n", fd, strerror (errno));
+ }
/* Assign /dev/null to stdout unless in verbose mode. */
if (!verbose)
{
fd = open ("/dev/null", O_RDONLY);
if (fd == -1)
- die ("failed to open '%s': %s\n", "/dev/null", strerror (errno));
+ {
+ xfree (arg_list);
+ die ("failed to open '%s': %s\n", "/dev/null", strerror (errno));
+ }
if (fd != 1 && dup2 (fd, 1) == -1)
- die ("dup2(%d,1) failed: %s\n", fd, strerror (errno));
+ {
+ xfree (arg_list);
+ die ("dup2(%d,1) failed: %s\n", fd, strerror (errno));
+ }
}
/* Exec the program. */