Support locking under Windows.

* src/ath.c: Add support for Windows.
* 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.
--

1.6.0 misses locking for Windows and non ELF systems.  This patch
fixes the Windows case.

For 1.7 we will use the forthcoming gpgrt locking functions of
libgpg-error.  However, we don't want to to that for 1.6. and thus
implement W32 locking directly.  We further add a test feature for the
locking functions.

Signed-off-by: Werner Koch <wk@gnupg.org>
Truncate hash values for ECDSA signature scheme

* 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.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
(cherry picked from commit 9edcf1090e0485f9f383b6c54b18ea8ca3d4a225)
Check compiler features only for the relevant platform.

* 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.
--

There is no need to check x86 options if we are targeting ARM and vice
versa.  This may only introduce build problems.  With this patch the
summary output at the end of the compiler also shows more reasonable
messages.

Signed-off-by: Werner Koch <wk@gnupg.org>
Fix memory leaks in ecc code

* 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.

--
==11657== 252 (80 direct, 172 indirect) bytes in 4 blocks are definitely lost in loss record 8 of 8
==11657==    at 0x4028A28: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==11657==    by 0x404178F: _gcry_private_malloc (stdmem.c:113)
==11657==    by 0x403CED1: do_malloc.constprop.4 (global.c:768)
==11657==    by 0x403DD01: _gcry_xmalloc (global.c:790)
==11657==    by 0x409EAE0: _gcry_mpi_alloc (mpiutil.c:84)
==11657==    by 0x409C4E4: _gcry_mpi_scan (mpicoder.c:466)
==11657==    by 0x404009C: _gcry_sexp_nth_mpi (sexp.c:796)
==11657==    by 0x40410B5: _gcry_sexp_vextract_param (sexp.c:2327)
==11657==    by 0x4041396: _gcry_sexp_extract_param (sexp.c:2378)
==11657==    by 0x407B895: compute_keygrip (ecc.c:1492)
==11657==    by 0x404BBE8: _gcry_pk_get_keygrip (pubkey.c:674)
==11657==    by 0x403B1BF: gcry_pk_get_keygrip (visibility.c:1056)

==16502== 144 (60 direct, 84 indirect) bytes in 3 blocks are definitely lost in loss record 3 of 7
==16502==    at 0x4028A28: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==16502==    by 0x404B4DE: _gcry_private_malloc (stdmem.c:113)
==16502==    by 0x404667B: do_malloc (global.c:768)
==16502==    by 0x40466E7: _gcry_malloc (global.c:790)
==16502==    by 0x4046A55: _gcry_xmalloc (global.c:944)
==16502==    by 0x40CD25B: _gcry_mpi_alloc (mpiutil.c:84)
==16502==    by 0x40CAC3E: _gcry_mpi_scan (mpicoder.c:548)
==16502==    by 0x40A72B2: scanval (ecc-curves.c:432)
==16502==    by 0x40A7B0D: _gcry_ecc_get_curve (ecc-curves.c:685)
==16502==    by 0x4058164: _gcry_pk_get_curve (pubkey.c:747)
==16502==    by 0x4043E14: gcry_pk_get_curve (visibility.c:1067)
==16502==    by 0x8048934: check_matching (curves.c:124)

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
(cherry picked from commit 6d87e6abdfb7552323a95401f14e6367398a3e5a)
Fix most of memory leaks in tests code

* 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.

--
The only remaining reported memory leak is one expected leak from
mpitests.c.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
(cherry picked from commit 5c150ece094bf0a504a111ce6c7b72e8d0b0457a)
tests: Pass -no-install to libtool

* tests/Makefile.am: add AM_LDFLAGS = -no-install

--
There is little point building tests with support for installation.
Passing -no-install stops libtool from building wrapper scripts,
thus allowing direct gdb/valgrind invocation on programs in tests/
subdirectory.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
(cherry picked from commit bf34bfa5c458ee5ece91f25e3b4194d768498ab6)
mpi: Minor fix for Atari-mint.

* mpi/config.links [m68k-atari-mint]: Do not assume 68020.  Suggested
by Alan Hourihane.
sexp: Fix broken gcry_sexp_nth.

* 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/tsexp.c (bug_1594): New.
(main): Run new test.
--

Before 1.6.0 gcry_sexp_nth (list, 0) with a LIST of "(a (b 3:pqr) (c
3:456) (d 3:xyz))" returned the entire list.  1.6.0 instead returned
NULL.  However, this is also surprising and the expected value would
be "(a)".  This patch fixes this.

Somewhat related to that gcry_sexp_nth returned a broken list if
requesting index 1 of a list like "(n foo)".  It returned just the
"foo" but not as a list which is required by the S-expression specs.
Due to this patch the returned value is now "(foo)".

Thanks to Ludovic Courtès for pointing out these problems.

GnuPG-bug-id: 1594
(cherry picked from commit cbdc355415f83ed62da4f3618767eba54d7e6d37)

Resolved conflicts:
	tests/tsexp.c: Fix for renamed file in master.
Fix RSA Blinding.

* cipher/rsa.c (rsa_decrypt): Loop to get multiplicative inverse.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
(cherry picked from commit 121a90d8931944974054f7d94f63b7f89df87fa5)
tests: Remove non-portable format specifiers.

* tests/basic.c: Replace "%zi" by "%d" and casts.
Support non weak symbol pthread platforms.

* m4/lock.m4, m4/threadlib.m4: New.  From libgpg-error master.
* m4/Makefile.am (EXTRA_DIST): Add them.
* configure.ac (HAVE_PTHREAD): Remove test and ac_define.
(gl_LOCK): Do not use under Windows.
(LIBGCRYPT_CONFIG_LIBS): Add LIBTHREAD to support non-ELF pthread
systems.
* src/Makefile.am (dumpsexp_LDADD, mpicalc_LDADD, hmac256_LDADD)
(gcryptrnd_LDADD): Add LIBTHREAD.
* src/ath.c: Include pthread for any pthread version.
(ath_init, ath_install, ath_mutex_init, ath_mutex_destroy)
(ath_mutex_lock, ath_mutex_unlock): Support non-weak symbol pthread
systems.
* tests/Makefile.am (LDADD): Add LIBTHREAD.
* tests/t-lock.c: Replace HAVE_PTHREAD by USE_POSIX_THREADS
(run_test): Run only under W32 or pthread.
--

This has been tested on "AIX power-aix 1 7" using gcc 4.8.

Signed-off-by: Werner Koch <wk@gnupg.org>
Reserve control code for FIPS extensions.

* 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.

(cherry picked from commit aea96a64fbc58a0b6f9f435e97e93294c6eb1052)
Release 1.6.1.

* configure.ac: Set LT version to C20/A0/R1.
Post release updates.

--
cipher: Take care of ENABLE_NEON_SUPPORT.

* cipher/salsa20.c (USE_ARM_NEON_ASM): Define only if
ENABLE_NEON_SUPPORT is defined.
* cipher/serpent.c (USE_NEON): Ditto.
* cipher/sha512.c (USE_ARM_NEON_ASM): Ditto.
--

The generic C source files must only include NEON support if that is
enabled.  The dedicated ASM files are conditionally compiled and thus
do not need to use it.

GnuPG-bug-id: 1603
Signed-off-by: Werner Koch <wk@gnupg.org>
(cherry picked from commit 52f7c48c901a3de51bd690a218f3de2f71e8d790)

Resolved conflicts:
* cipher/sha1.c: Remove changes - no asm support in 1.6.