7 years agoFix pthread locking and remove defunctional support for static lock init.
Marcus Brinkmann [Tue, 3 Jan 2012 21:04:30 +0000 (22:04 +0100)]
Fix pthread locking and remove defunctional support for static lock init.

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

7 years agoAdd alignment tests for the cipher tests.
Werner Koch [Fri, 16 Dec 2011 21:02:18 +0000 (22:02 +0100)]
Add alignment tests for the cipher tests.

* 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

As reported in bug#1384 Serpent fails on a sparc64.  One problem with
the test code is that due to the bus error the error message won't be

7 years agotests/prime: Add option to create a well known private key.
Werner Koch [Wed, 7 Dec 2011 15:52:03 +0000 (16:52 +0100)]
tests/prime: Add option to create a well known private key.

* tests/prime.c (print_mpi, create_42prime): New.
(main): Add option --42.

7 years agoDo not build the random-daemon by make distcheck.
Werner Koch [Thu, 1 Dec 2011 13:36:25 +0000 (14:36 +0100)]
Do not build the random-daemon by make distcheck.

* (DISTCHECK_CONFIGURE_FLAGS): Disable building of the
random daemon

7 years agoGenerate the ChangeLog from commit logs.
Werner Koch [Thu, 1 Dec 2011 13:20:31 +0000 (14:20 +0100)]
Generate the ChangeLog from commit logs.

* 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.
* (EXTRA_DIST): Add new files.
(gen-ChangeLog): New.
(dist-hook): Run gen-ChangeLog.

Rename all ChangeLog files to ChangeLog-2011.

7 years agoCompleted switch to a simpler thread model.
Werner Koch [Thu, 1 Dec 2011 12:55:06 +0000 (13:55 +0100)]
Completed switch to a simpler thread model.

This is only a first step.  We will need to either implement
pthread_atfork or - better - make use use POSIX RT semaphores.

7 years agoMake build_revision shorter for W32 use
Werner Koch [Tue, 8 Mar 2011 12:49:04 +0000 (13:49 +0100)]
Make build_revision shorter for W32 use

7 years agoaccept --with-libgpg-error-prefix as well as --with-gpg-error-prefix
Jim Meyering [Mon, 28 Nov 2011 12:46:16 +0000 (13:46 +0100)]
accept --with-libgpg-error-prefix as well as --with-gpg-error-prefix

* m4/gpg-error.m4: Update from git master.

8 years agotests: avoid write-beyond-end-of-heap buffer
Jim Meyering [Fri, 11 Nov 2011 10:38:19 +0000 (11:38 +0100)]
tests: avoid write-beyond-end-of-heap buffer

In libgcrypt's "make check" (latest from git), I was surprised to
see the "basic" test fail.  Here's a patch:

Avoid scary-looking (with MALLOC_CHECK_=3) "make check" test failure:

  *** glibc detected *** /h/j/w/co/libgcrypt/tests/.libs/lt-basic: free(): invalid
  pointer: 0x0000000001f9d080 ***
  ======= Backtrace: =========
  ======= Memory map: ========
  00400000-00411000 r-xp 00000000 08:08 2787510 /w/co/libgcrypt/tests/.libs/lt-basic

>From 722e6d470371bb3d995e0a6a67cd9c2ffd7bb664 Mon Sep 17 00:00:00 2001
From: Jim Meyering <>
Date: Fri, 11 Nov 2011 11:34:45 +0100
Subject: [PATCH] tests: avoid write-beyond-end-of-heap buffer

* basic.c (check_bulk_cipher_modes): Allocate one more byte in
each of the two test buffers.  Otherwise, running
"env -i MALLOC_CHECK_=3 ./basic" would abort.

8 years agoFactor cipher mode code out to separate files.
Werner Koch [Thu, 15 Sep 2011 16:55:28 +0000 (18:55 +0200)]
Factor cipher mode code out to separate files.

Fixed Changelog and Makefile.
Added missing cipher-aeswrap.c file.

8 years agoRemoved deprecated debug macros.
Werner Koch [Thu, 15 Sep 2011 16:24:23 +0000 (18:24 +0200)]
Removed deprecated debug macros.

8 years agoRemoved the module registration interface
Werner Koch [Thu, 15 Sep 2011 16:08:55 +0000 (18:08 +0200)]
Removed the module registration interface

The module registration interface is not widely used but complicates
the internal operation of Libgcrypt a lot.  It also does not allow for
efficient implementation of new algorithm or cipher modes.  Further the
required locking of all access to internal module data or functions
would make it hard to come up with a deadlock free pthread_atfork
implementation.  Thus we remove the entire subsystem.

Note that the module system is still used internally but it is now
possible to change it without breaking the ABI.

In case a feature to add more algorithms demanded in the future, we
may add one by dlopening modules at startup time from a dedicated

8 years agoRemoved the AC interface (gcry_ac_*)
Werner Koch [Thu, 15 Sep 2011 14:54:33 +0000 (16:54 +0200)]
Removed the AC interface (gcry_ac_*)

This interface has long been deprecated.  It was also initially only
declared as an experimental interface.  It added its own kind of
complexity and we found that it does not make applications easier to
read.  Modern features of Libgcrypt were not supported and its removal
reduces the SLOC which is a Good Thing from a security POV.

8 years agoFix an endless loop in hmac256 --binary
Werner Koch [Thu, 15 Sep 2011 09:47:37 +0000 (11:47 +0200)]
Fix an endless loop in hmac256 --binary

8 years agoAdd a man page for hmac256.
Werner Koch [Thu, 15 Sep 2011 09:43:10 +0000 (11:43 +0200)]
Add a man page for hmac256.

We also include the man page in the manual.

8 years agoTypo fix in gcrypt.texi
Werner Koch [Thu, 15 Sep 2011 08:36:43 +0000 (10:36 +0200)]
Typo fix in gcrypt.texi

8 years agoFix a problem with select and high fds.
Werner Koch [Thu, 8 Sep 2011 08:53:12 +0000 (10:53 +0200)]
Fix a problem with select and high fds.

If on systems where the maximum number of fds may be dynamically
configured to a value of FD_MAXSIZE or higher and the RNG is first
used after more than FD_SETSIZE-1 descriptors are in use, we disable
the progress messages from the RNG.  A better solution would be too
use poll but that requires more tests.

The same problem exists in rndunix.c - however this rng is only used
on old Unices and I assume that they don't feature dynamically
configured maximum fd sizes.

8 years agoFactor cipher mode code out to separate files.
Werner Koch [Wed, 3 Aug 2011 19:34:39 +0000 (21:34 +0200)]
Factor cipher mode code out to separate files.

This is a preparation for adding more modes which are more complicated
and thus ask for separate file.  For uniformity we do this for all
modes except ECB.  It has also the advantage that it makes CPU specific
variants of the code more easy to implement (e.g. the XOR operations).

8 years agoAllow building for ARM thumb. Similar to bug#1202.
Werner Koch [Mon, 4 Jul 2011 10:45:44 +0000 (12:45 +0200)]
Allow building for ARM thumb.  Similar to bug#1202.

8 years agoFixed a bug in the gcry_cipher_get_algo_keylen and gcry_cipher_get_algo_blklen
Werner Koch [Wed, 29 Jun 2011 13:26:22 +0000 (15:26 +0200)]
Fixed a bug in the gcry_cipher_get_algo_keylen and gcry_cipher_get_algo_blklen

Contrary to the documentation those functions aborted if an invalid
algorithm was passed.  The same happened for the corresponding
subcommands of gcry_cipher_algo_info.

8 years agoPrepare a new development branch
Werner Koch [Wed, 29 Jun 2011 10:47:26 +0000 (12:47 +0200)]
Prepare a new development branch

8 years agoPost release updates
Werner Koch [Wed, 29 Jun 2011 09:40:39 +0000 (11:40 +0200)]
Post release updates

8 years agoPrepare for the 1.5.0 release. libgcrypt-1.5.0
Werner Koch [Wed, 29 Jun 2011 08:57:04 +0000 (10:57 +0200)]
Prepare for the 1.5.0 release.

8 years agoUpdate config.{sub,guess}
Werner Koch [Wed, 29 Jun 2011 08:56:22 +0000 (10:56 +0200)]
Update config.{sub,guess}

8 years agoImplement the --debug option for the keygrip test.
Werner Koch [Wed, 29 Jun 2011 08:40:57 +0000 (10:40 +0200)]
Implement the --debug option for the keygrip test.

8 years agoSuggest to use GCRYMPI_FMT_USG with gcry_sexp_nth_mpi.
Werner Koch [Mon, 13 Jun 2011 17:15:38 +0000 (19:15 +0200)]
Suggest to use GCRYMPI_FMT_USG with gcry_sexp_nth_mpi.

8 years agoFixed a pkcs#1 v1.5 flaw regarding leading zero bytes
Werner Koch [Mon, 13 Jun 2011 10:33:08 +0000 (12:33 +0200)]
Fixed a pkcs#1 v1.5 flaw regarding leading zero bytes

With these changes the entire new pkcs#1 test suite passes fine.

The leading zero bytes used to appear due to mixed signed/unsigned use
of our internal representation of the values as MPIs.  The changed code
also detected another bug in the DSA selftest which used the pkcs1
flag - this was certainly wrong but didn't throw an error.  The code
in GnuPG does the right thing thus I believe not too many applications
got it as wrong as we in our own selftest.

8 years agoAdd a full set of pkcs#1 v2 test vectors
Werner Koch [Mon, 13 Jun 2011 10:28:03 +0000 (12:28 +0200)]
Add a full set of pkcs#1 v2 test vectors

For v1.5 we use somewhat unofficial test vectors we found on the
rsalabs FTP server.  There is a little awk script which helped us to
convert them.  All the test vectors are in separate files with C
tables to keep the actual test program readable.

We detected a few flaws in our pkcs1 implementation which will be
fixed with the next commit.

8 years agoFixed leading zero problems in PSS and OAEP. ueno-pss
Werner Koch [Fri, 10 Jun 2011 08:52:18 +0000 (10:52 +0200)]
Fixed leading zero problems in PSS and OAEP.

8 years agoAdd the PSS test vectors
Werner Koch [Thu, 9 Jun 2011 18:53:32 +0000 (20:53 +0200)]
Add the PSS test vectors

8 years agoAdd OAEP regression test.
Werner Koch [Thu, 9 Jun 2011 16:54:20 +0000 (18:54 +0200)]
Add OAEP regression test.

8 years agoAdd a small comment.
Werner Koch [Thu, 9 Jun 2011 13:47:15 +0000 (15:47 +0200)]
Add a small comment.

8 years agoUse octet_string_from_mpi in oaep_decode.
Werner Koch [Thu, 9 Jun 2011 12:53:10 +0000 (14:53 +0200)]
Use octet_string_from_mpi in oaep_decode.

This is to remove duplicated code.  I had to move
octet_string_from_mpi more to the top of the file.

8 years agoAdd random-override parameter to the PK functions to allow better regression testing.
Werner Koch [Thu, 9 Jun 2011 12:44:18 +0000 (14:44 +0200)]
Add random-override parameter to the PK functions to allow better regression testing.

8 years agoExpect mHash as input to the PSS functions.
Werner Koch [Thu, 9 Jun 2011 12:00:13 +0000 (14:00 +0200)]
Expect mHash as input to the PSS functions.

The old code did the entire hashing of the message.  The reason we
want the hashed message as input is that a a message might be pretty
long and that the other padding schemes don't allow this either.

8 years agoMerge branch 'master' into ueno-pss
Werner Koch [Thu, 9 Jun 2011 07:05:15 +0000 (09:05 +0200)]
Merge branch 'master' into ueno-pss

Solved conflicts:

8 years agoRestructure pss_verify to match the description in rfc-3447.
Werner Koch [Thu, 9 Jun 2011 06:48:27 +0000 (08:48 +0200)]
Restructure pss_verify to match the description in rfc-3447.

8 years agoRestructure pss_encode to match the description in rfc-3447.
Werner Koch [Wed, 8 Jun 2011 18:18:42 +0000 (20:18 +0200)]
Restructure pss_encode to match the description in rfc-3447.

8 years agoRestructure oaep_decode to match the description in rfc-3447.
Werner Koch [Fri, 3 Jun 2011 15:13:47 +0000 (17:13 +0200)]
Restructure oaep_decode to match the description in rfc-3447.

This also takes the suggestion by Tom Ritter in account to avoid time
attacks.  Ueno's fixes posted to the ML are thus not needed.

8 years agoRestructure oaep_encode to match the description in rfc-3447.
Werner Koch [Tue, 31 May 2011 15:56:13 +0000 (17:56 +0200)]
Restructure oaep_encode to match the description in rfc-3447.

8 years agoAdd comments to the mgf1 function and speed it up.
Werner Koch [Tue, 31 May 2011 13:14:51 +0000 (15:14 +0200)]
Add comments to the mgf1 function and speed it up.

8 years agoAdd option --die to ease debugging
Werner Koch [Fri, 3 Jun 2011 14:38:11 +0000 (16:38 +0200)]
Add option --die to ease debugging

8 years agoLet gcry_pk_decrypt in non-raw mode return a verbatim buffer.
Werner Koch [Tue, 31 May 2011 09:08:12 +0000 (11:08 +0200)]
Let gcry_pk_decrypt in non-raw mode return a verbatim buffer.

The non-raw modes of gcry_pk_decrypt (i.e. pkcs1 or oaep un-padding)
are new and thus we can still change the semantics.

They now return a verbatim buffer and not anything which internally
has been interpreted as a signed integer.  In raw mode we still stick
to the old semantics which is usually fine because it is mostly used
with pkcs#1 padding and that guarantees that the return value may
never be interpreted as a signed MPI or shorted due to block type used
as the second byte.

8 years agoFixed pkcs#1 unpadding
Werner Koch [Mon, 30 May 2011 14:22:23 +0000 (16:22 +0200)]
Fixed pkcs#1 unpadding

Depending on the size of the used key the old code was not able to
cope with the missing leading zero byte of a pkcs#1 frame.  This is
due to the fact that we use MPIs for conveying the data and our MPIs
usually strip leading zero bytes.  The changed code should now behave
identical to the code used by GnuPG.

Also added a few more comments.

8 years agoFix double-free when un-padding invalid data.
Daiki Ueno [Fri, 27 May 2011 01:18:39 +0000 (10:18 +0900)]
Fix double-free when un-padding invalid data.

Also add invalid padding cases to the basic test.

8 years agoSupport PSS.
Daiki Ueno [Mon, 23 May 2011 09:25:16 +0000 (18:25 +0900)]
Support PSS.

8 years agoTell check_pubkey_* which PK algo is used.
Daiki Ueno [Tue, 24 May 2011 06:01:23 +0000 (15:01 +0900)]
Tell check_pubkey_* which PK algo is used.

8 years agoCleanup pk_encoding_ctx code.
Daiki Ueno [Tue, 24 May 2011 05:43:55 +0000 (14:43 +0900)]
Cleanup pk_encoding_ctx code.

Pass around verify function to pk_module->verify as some encodings like PSS
need custom verification logic.

8 years agoSimplify MGF1 by initializing MD handle at once.
Daiki Ueno [Tue, 24 May 2011 03:25:51 +0000 (12:25 +0900)]
Simplify MGF1 by initializing MD handle at once.

8 years agoMerge branch 'master'.
Werner Koch [Mon, 23 May 2011 11:48:30 +0000 (13:48 +0200)]
Merge branch 'master'.

Actually the same fix I did a few hours ago.

8 years agoAdd a few comments to the pkcs#1 code.
Werner Koch [Mon, 23 May 2011 09:19:17 +0000 (11:19 +0200)]
Add a few comments to the pkcs#1 code.

Also fixed a possible memory leak.

8 years agoFix memleak when decoding OAEP/PKCS#1 block type 2.
Daiki Ueno [Mon, 23 May 2011 03:09:01 +0000 (12:09 +0900)]
Fix memleak when decoding OAEP/PKCS#1 block type 2.

8 years agoAdd $(GPG_ERROR_LIBS) to gcryptrnd_LDADD for gpg_strerror.
Daiki Ueno [Thu, 19 May 2011 02:44:01 +0000 (11:44 +0900)]
Add $(GPG_ERROR_LIBS) to gcryptrnd_LDADD for gpg_strerror.

This avoids implicit DSO linking issue in Fedora.

8 years agoSupport PKCS#1 un-padding.
Daiki Ueno [Tue, 17 May 2011 08:47:30 +0000 (17:47 +0900)]
Support PKCS#1 un-padding.

Support PKCS#1 un-padding for encryption (not for signature).  This patch
also removes "unpad" flag (introduced by OAEP patch) since we can now
do un-padding implicitly when `pkcs1' or `oaep' is given.

8 years agoMinor updates to the OAEP code.
Werner Koch [Wed, 11 May 2011 09:11:16 +0000 (11:11 +0200)]
Minor updates to the OAEP code.

We now check that only one encoding method may be given.  In the error
case we make sure that a released OAEP label variable is set to NULL.
As a failsafe feature we use gpg_err_code_from_syserror all over in
pubkey.c; this has the advantage that a misbehaving gcry_free function
which does not set ERRNO now returns an error code in all cases.

8 years agoAdd missing ChangeLogs
Werner Koch [Wed, 11 May 2011 08:57:33 +0000 (10:57 +0200)]
Add missing ChangeLogs

8 years agoSupport RSA-OAEP padding for encryption.
Daiki Ueno [Fri, 6 May 2011 06:56:58 +0000 (15:56 +0900)]
Support RSA-OAEP padding for encryption.

8 years agoMake sure to return correct error codes for secmem failures.
Werner Koch [Tue, 19 Apr 2011 14:22:48 +0000 (16:22 +0200)]
Make sure to return correct error codes for secmem failures.

ERRNO was not always set and thus it could happen that a misleading
error code was returned form a malloc functions.  Fix was to set

At one place we also switched to the newer gpg_err_code_from_syserror
which makes sure to return a special error code in case ERRNO is not
set at all.

8 years agoFix double free in gcry_pk_get_keygrip.
Werner Koch [Mon, 11 Apr 2011 19:39:55 +0000 (21:39 +0200)]
Fix double free in gcry_pk_get_keygrip.

This was introduced by the previous memleak change.

8 years agoCTR mode may now be used with arbitrary long data chunks.
Werner Koch [Mon, 11 Apr 2011 19:36:48 +0000 (21:36 +0200)]
CTR mode may now be used with arbitrary long data chunks.

8 years agoAllow for truncation in CTR mode.
Werner Koch [Mon, 11 Apr 2011 17:21:47 +0000 (19:21 +0200)]
Allow for truncation in CTR mode.

This re-enables the behaviour of Libgcrypt 1.4.  Such truncation is
used by libotr and the current error-ed out here.  The bug was
introduced due to a rewrite of the function and the undocumented
feature of truncating OTR data.

8 years agoAdd a few comments to explain the generation of k.
Werner Koch [Fri, 8 Apr 2011 12:59:25 +0000 (14:59 +0200)]
Add a few comments to explain the generation of k.

8 years agoMove an AC_SUBST to avoid an Emacs warning
Werner Koch [Wed, 6 Apr 2011 08:17:48 +0000 (10:17 +0200)]
Move an AC_SUBST to avoid an Emacs warning

Recent versions of Emacs seem to have a not so strict check for local
buffer variables and thus detect our emacs_local_vars subs as improper
local variables.  Moving them more to the top of the file helps.
Another solution would have been to use m4 tricks.

8 years agoFix a small memory leak in gcry_pk_get_keygrip.
Werner Koch [Mon, 4 Apr 2011 14:27:36 +0000 (16:27 +0200)]
Fix a small memory leak in gcry_pk_get_keygrip.

These are two memory leaks, one in the generic code and one ECC
specific.  For an RSA key the first one accounted for 10 bytes, which
is not that small if applied on a large key database.

8 years agoAdd a test option to help finding memory leaks.
Werner Koch [Mon, 4 Apr 2011 14:26:41 +0000 (16:26 +0200)]
Add a test option to help finding memory leaks.

8 years agoMake sure that gcry_realloc (NULL, n) works on all platforms.
Werner Koch [Fri, 1 Apr 2011 08:16:31 +0000 (10:16 +0200)]
Make sure that gcry_realloc (NULL, n) works on all platforms.

realloc (NULL, n) shall behave exactly like malloc (n)
and realloc (p, 0) like free.

Not all platforms implement this correctly thus we now handle this
directly in gcry_realloc.

8 years agoAdd a version string to the binary
Werner Koch [Wed, 30 Mar 2011 09:22:56 +0000 (11:22 +0200)]
Add a version string to the binary

8 years agoFixed a few warnings emitted by gcc 4.6.
Werner Koch [Mon, 28 Mar 2011 12:46:36 +0000 (14:46 +0200)]
Fixed a few warnings emitted by gcc 4.6.

8 years agoNew function gcry_kdf_derive
Werner Koch [Wed, 9 Mar 2011 16:47:44 +0000 (17:47 +0100)]
New function gcry_kdf_derive

This allows us to factor the S2k code from gpg and gpg-agent out to
libgcrypt.  Created a bunch of test vectors using a hacked gpg 1.4.

The function also implements PBKDF2; tested against the RFC-6070 test

8 years agoShorten BUILD_REVISION macro
Werner Koch [Tue, 8 Mar 2011 12:56:49 +0000 (13:56 +0100)]
Shorten BUILD_REVISION macro

8 years agoAdd option host to libgcrypt-config.
Werner Koch [Wed, 23 Feb 2011 15:30:38 +0000 (16:30 +0100)]
Add option host to libgcrypt-config.

Also update libgcrypt.m4 for better user experience when

8 years agoUpdated gpg-error.m4 (bug#1261)
Werner Koch [Wed, 23 Feb 2011 11:48:07 +0000 (12:48 +0100)]
Updated gpg-error.m4 (bug#1261)

8 years agoUse AES-NI insns for CTR mode.
Werner Koch [Tue, 22 Feb 2011 15:08:13 +0000 (16:08 +0100)]
Use AES-NI insns for CTR mode.

That really boosts the performance of CTR.

8 years agoFinal changes for 1.5.0-beta1 libgcrypt-1.5.0-beta1
Werner Koch [Mon, 21 Feb 2011 16:04:46 +0000 (17:04 +0100)]
Final changes for 1.5.0-beta1

8 years agoAllow --alignment option for md_bench
Werner Koch [Mon, 21 Feb 2011 09:00:22 +0000 (10:00 +0100)]
Allow --alignment option for md_bench

8 years agoFix strict-aliasing problems in rijndael.c
Werner Koch [Fri, 18 Feb 2011 13:30:13 +0000 (14:30 +0100)]
Fix strict-aliasing problems in rijndael.c

We used to use -fno-strict-aliasing but only if configured in
maintainer-mode.  Thus with gcc-4.4 we could run into problems.  The
fix is to define a new type with the may_alias attribute and use this
for the casting stuff in do_encrypt_aligned and do_decrypt_aligned.

8 years agoFlag the _ac_ functions as deprecated.
Werner Koch [Thu, 17 Feb 2011 18:44:23 +0000 (19:44 +0100)]
Flag the _ac_ functions as deprecated.

The AC functions are deprecated for a long time.  How we will even
print a warning if they are used.

The module register interface is now also deprecated and the use of
those functions will yield a warning as well.

8 years agoFix AES-NI detection.
Werner Koch [Thu, 17 Feb 2011 10:00:25 +0000 (11:00 +0100)]
Fix AES-NI detection.

Really a kind of bown paper bag bug: Use AND and not SUB for bit
testing.  I should have known that, given that 30 years ago I wrote
almost everything in asm.

Werner Koch [Wed, 16 Feb 2011 17:31:31 +0000 (18:31 +0100)]

This option is useful to disable detected hardware features. It has
been implemented in benchmark, so that it is now possible to run

  tests/benchmark --disable-hwf intel-aesni  cipher aes aes192 aes256

to compare the use of AES-NI insns to the pure C code.

8 years agoImproved AES-CFB performance using AES-NI insn.
Werner Koch [Wed, 16 Feb 2011 16:17:49 +0000 (17:17 +0100)]
Improved AES-CFB performance using AES-NI insn.

There is also a new regression test which tests the bulk
encryption methods we have for a few ciphers (namely AES).  A bug in
them could have slipped through because we only did encrypt-decrypt
tests but didn't compared them to fixed vectors.

Benchmarks using gcc 4.4 show a 7 fold speed improvement for CFB
encryption and 14 for decryption.  This is a bit strange; someone
should check the code to see why we have this difference.

Without AESNI (undef USE_AESNI in rijndael.c):

$ ./benchmark --cipher-repetitions 100 --alignment 16 cipher aes aes256
Running each test 100 times.
                ECB/Stream         CBC             CFB             OFB             CTR
             --------------- --------------- --------------- --------------- ---------------
AES           1370ms  1430ms  1140ms  1190ms  1120ms  1130ms  1520ms  1540ms  1780ms  1770ms
AES256        1780ms  1850ms  1530ms  1610ms  1540ms  1530ms  1930ms  1960ms  2180ms  2180ms


$ ./benchmark --cipher-repetitions 100 --alignment 16 cipher aes aes256
Running each test 100 times.
                ECB/Stream         CBC             CFB             OFB             CTR
             --------------- --------------- --------------- --------------- ---------------
AES             80ms   100ms   240ms   220ms   140ms    70ms   300ms   290ms   490ms   510ms
AES256         130ms   130ms   290ms   270ms   200ms   100ms   340ms   340ms   470ms   470ms

$ ./benchmark --cipher-repetitions 100 --alignment 0 cipher aes aes256
Running each test 100 times.
                ECB/Stream         CBC             CFB             OFB             CTR
             --------------- --------------- --------------- --------------- ---------------
AES             80ms    90ms   240ms   230ms   150ms    80ms   290ms   300ms   500ms   530ms
AES256         130ms   130ms   290ms   260ms   190ms   110ms   340ms   340ms   470ms   490ms

8 years agoAdd asm code to use aeskeygenassist.
Werner Koch [Tue, 15 Feb 2011 17:37:43 +0000 (18:37 +0100)]
Add asm code to use aeskeygenassist.

However, this code is disabled right now.

8 years agoChange more AES-NI code into plain asm
Werner Koch [Tue, 15 Feb 2011 13:38:02 +0000 (14:38 +0100)]
Change more AES-NI code into plain asm

8 years agoUse a better alignment.
Werner Koch [Mon, 14 Feb 2011 19:31:47 +0000 (20:31 +0100)]
Use a better alignment.

benchmark does now support the option
  --alignment 16
to test the non-aligned overhead.

8 years agoSimplify context alignment and align the IV.
Werner Koch [Mon, 14 Feb 2011 18:18:20 +0000 (19:18 +0100)]
Simplify context alignment and align the IV.

8 years agoFirst take on using AES-NI instructions
Werner Koch [Sun, 13 Feb 2011 16:48:37 +0000 (17:48 +0100)]
First take on using AES-NI instructions

This first naive use of the new Intel AES-NI instructions boosts the
performance of AES on CPUs supporting this by 3 to 5 times.

Results from running
  ./benchmark --cipher-repetitions 10 --large-buffers  cipher aes
on a
  cpu family      : 6
  model           : 37
  model name      : Intel(R) Core(TM) i5 CPU         660  @ 3.33GHz
  stepping        : 2
  cpu MHz         : 3325.494
  cache size      : 4096 KB
  cpu cores       : 2

yields this:

    ECB/Stream         CBC             CFB             OFB             CTR
--------------- --------------- --------------- --------------- ---------------
  130ms   110ms   110ms   100ms   110ms   110ms   160ms   150ms   170ms   170ms
   40ms    40ms    20ms    30ms    30ms    20ms    70ms    70ms    80ms    80ms

The first line is with runtime switched off AES-NI instructions (don't
set use_aesni in do_setkey), the second with enabled AES-NI.  By
fixing the alignment, I hope to squeeze out a little more even with
this naive implementation.

8 years agoRenamed existing flag for AES-NI and fixed detection.
Werner Koch [Fri, 11 Feb 2011 15:06:20 +0000 (16:06 +0100)]
Renamed existing flag for AES-NI and fixed detection.

8 years agoSmall tweak to the ECC debug output.
Werner Koch [Fri, 11 Feb 2011 14:52:36 +0000 (15:52 +0100)]
Small tweak to the ECC debug output.

8 years agoNuked almost all trailing whitespace. post-nuke-of-trailing-ws
Werner Koch [Fri, 4 Feb 2011 19:21:45 +0000 (20:21 +0100)]
Nuked almost all trailing whitespace.

Check and install the standard git pre-commit hook.

8 years agoAdd ChangeLog Entry for Andrey's changes. ECC-INTEGRATION-1-5 ecc-integration-done
Werner Koch [Wed, 2 Feb 2011 15:10:42 +0000 (16:10 +0100)]
Add ChangeLog Entry for Andrey's changes.

Nuke trailing white spaces in the ChangeLog.
Revert one debug message string.

Ready to me merged back to master.

8 years agoAdd function gcry_pk_get_param.
Werner Koch [Tue, 1 Feb 2011 17:31:57 +0000 (18:31 +0100)]
Add function gcry_pk_get_param.

Also changed quite some trailing white spaces.  I never configured
that in Emacs but git diff annoys me with red lines and thus it seems
better to use nuke-trailing-whitespace autmatically.  Sorry for the
extra diff lines.  A diff filter should help to not show those

8 years agoHandle opaque MPIs in gcry_mpi_cmp
Werner Koch [Tue, 1 Feb 2011 15:13:37 +0000 (16:13 +0100)]
Handle opaque MPIs in gcry_mpi_cmp

8 years agoAdd gcry_pk_get_curve.
Werner Koch [Tue, 1 Feb 2011 09:40:50 +0000 (10:40 +0100)]
Add gcry_pk_get_curve.

8 years agoChanged ecdh parameter names and fixed MPI allocation.
Werner Koch [Mon, 31 Jan 2011 14:35:08 +0000 (15:35 +0100)]
Changed ecdh parameter names and fixed MPI allocation.

8 years agoReturn used curve name with ECC key generation
Werner Koch [Mon, 31 Jan 2011 08:29:20 +0000 (09:29 +0100)]
Return used curve name with ECC key generation

8 years agoReverted the API to the old one.
Werner Koch [Thu, 27 Jan 2011 10:32:58 +0000 (11:32 +0100)]
Reverted the API to the old one.

Storing thy curve name into an MPI and dropping all the other
parameters breaks the ABI.  Further it as not anymore possible to
specify arbitrary curves.  Thus I had to revert it to the old ABI.

Another advantage is that the required ECDH changes are now minimal.
The disadvantage is that we need to adjust the GnuPG code and do the
curve selection and translation to DER encoded OIDs itself.

8 years agoMerge commit 'f4786ac' into ECC-INTEGRATION-1-5
Werner Koch [Thu, 27 Jan 2011 05:51:04 +0000 (06:51 +0100)]
Merge commit 'f4786ac' into ECC-INTEGRATION-1-5

8 years agoExtend ignore file for non-vpath builds
Werner Koch [Thu, 27 Jan 2011 05:47:06 +0000 (06:47 +0100)]
Extend ignore file for non-vpath builds

8 years agoBegin of changing the ECDH API.
Werner Koch [Wed, 26 Jan 2011 18:26:38 +0000 (19:26 +0100)]
Begin of changing the ECDH API.

8 years agoEditorial changes.
Werner Koch [Thu, 20 Jan 2011 17:50:29 +0000 (18:50 +0100)]
Editorial changes.
Adjusted indentation to GNU style.
Replaced C++ style comments.
Reformatted some comments.

8 years agoRevert version number to 1.5.0.
Werner Koch [Thu, 20 Jan 2011 16:42:37 +0000 (17:42 +0100)]
Revert version number to 1.5.0.
Update AUTHORS and NEWS.