Diffusion GnuPG 5d6c080522e1

g10/decrypt-data: use iobuf_read for higher performance

Authored by jukivili on Nov 8 2018, 8:31 PM.

Description

g10/decrypt-data: use iobuf_read for higher performance

* g10/decrypt-data.c (fill_buffer): Use iobuf_read instead of iobuf_get
for reading data.

This patch reduces iobuf_read per byte processing overhead and speeds
up decryption.

Benchmark results below, tested on Intel Core i7-4790K (turbo off).
Encrypted 2 GiB through pipe to ramfs file using AES128. Decrypt
ramfs file out through pipe to /dev/null.

before patch-set

	       gpg process

no-armor: user time pipe transfer rate
encrypt-aead: 1.02 1.0 GB/s
decrypt-aead: 10.8 185 MB/s
encrypt-cfb: 4.8 342 MB/s
decrypt-cfb: 12.7 157 MB/s

gpg process

armor: user time pipe transfer rate
encrypt-aead: 13.8 140 MB/s
decrypt-aead: 30.6 68 MB/s
encrypt-cfb: 17.4 114 MB/s
decrypt-cfb: 32.6 64 MB/s

after (decrypt opt)

gpg process

no-armor: user time pipe transfer rate
decrypt-aead: 7.3 263 MB/s
decrypt-cfb: 9.3 211 MB/s

gpg process

armor: user time pipe transfer rate
decrypt-aead: 27.0 77 MB/s
decrypt-cfb: 29.0 72 MB/s

Note: decryption results are much slower than encryption because of
extra SHA1 & RIPEMD160 hashing.

  • GnuPG-bug-id: T3786
  • Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>