-- -- PGP compression support -- select pgp_sym_decrypt(dearmor(' -----BEGIN PGP MESSAGE----- ww0ECQMCsci6AdHnELlh0kQB4jFcVwHMJg0Bulop7m3Mi36s15TAhBo0AnzIrRFrdLVCkKohsS6+ DMcmR53SXfLoDJOv/M8uKj3QSq7oWNIp95pxfA== =tbSn -----END PGP MESSAGE----- '), 'key', 'expect-compress-algo=1'); pgp_sym_decrypt ----------------- Secret message (1 row) select pgp_sym_decrypt( pgp_sym_encrypt('Secret message', 'key', 'compress-algo=0'), 'key', 'expect-compress-algo=0'); pgp_sym_decrypt ----------------- Secret message (1 row) select pgp_sym_decrypt( pgp_sym_encrypt('Secret message', 'key', 'compress-algo=1'), 'key', 'expect-compress-algo=1'); pgp_sym_decrypt ----------------- Secret message (1 row) select pgp_sym_decrypt( pgp_sym_encrypt('Secret message', 'key', 'compress-algo=2'), 'key', 'expect-compress-algo=2'); pgp_sym_decrypt ----------------- Secret message (1 row) -- level=0 should turn compression off select pgp_sym_decrypt( pgp_sym_encrypt('Secret message', 'key', 'compress-algo=2, compress-level=0'), 'key', 'expect-compress-algo=0'); pgp_sym_decrypt ----------------- Secret message (1 row) -- check corner case involving an input string of 16kB, as per bug #16476. SELECT setseed(0); setseed --------- (1 row) WITH random_string AS ( -- This generates a random string of 16366 bytes. This is chosen -- as random so that it does not get compressed, and the decompression -- would work on a string with the same length as the origin, making the -- test behavior more predictible. lpad() ensures that the generated -- hexadecimal value is completed by extra zero characters if random() -- has generated a value strictly lower than 16. SELECT string_agg(decode(lpad(to_hex((random()*256)::int), 2, '0'), 'hex'), '') as bytes FROM generate_series(0, 16365) ) SELECT bytes = pgp_sym_decrypt_bytea( pgp_sym_encrypt_bytea(bytes, 'key', 'compress-algo=1,compress-level=1'), 'key', 'expect-compress-algo=1') AS is_same FROM random_string; is_same --------- t (1 row)