RE: BUG #16476: pgp_sym_encrypt_bytea with compress-level=6 : Wrong key or corrupt data

Frank Gagnepain <frank.gagnepain@intm.fr>

From: Frank Gagnepain <frank.gagnepain@intm.fr>
To: Jeff Janes <jeff.janes@gmail.com>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2020-06-10T15:17:51Z
Lists: pgsql-bugs

Attachments

Hello again,

Thank you for this script ,

We managed to get you an example of data that triggers the error message (with compress-level=6) in attachments.
You would have to unzip first and then test it (I mean it hasnt been zipped by pgcrypto).

Cheers,

Frank GAGNEPAIN




________________________________
De : Jeff Janes <jeff.janes@gmail.com>
Envoyé : mercredi 3 juin 2020 14:35
À : Frank Gagnepain <frank.gagnepain@intm.fr>; pgsql-bugs <pgsql-bugs@lists.postgresql.org>
Objet : Re: BUG #16476: pgp_sym_encrypt_bytea with compress-level=6 : Wrong key or corrupt data


select
pgp_sym_decrypt_bytea(pgp_sym_encrypt_bytea(bytea_import(DATA),'password','compress-algo=1,
cipher-algo=aes256, compress-level=6'),'password','compress-algo=1,
cipher-algo=aes256');


decryption reads the settings from the encrypted message header, there is no need to specify them again.

I can reproduce this at any compression level if the data is random (not compressible) and exactly 16365 bytes long.  If the data is compressible, then you need a longer length of message to reproduce it and it depends on the random content and compression level.

I'm attaching the reproducer as a Perl script.  I have not investigated the C code of pgcrypto itself.

Cheers,

Jeff

Commits

  1. Fix corner case with 16kB-long decompression in pgcrypto, take 2

  2. Fix ancient violation of zlib's API spec.

  3. Revert "Fix corner case with PGP decompression in pgcrypto"

  4. Fix corner case with PGP decompression in pgcrypto