crypto.sql

application/x-sql

Filename: crypto.sql
Type: application/x-sql
Part: 0
Message: Re: BUG #16476: pgp_sym_encrypt_bytea with compress-level=6 : Wrong key or corrupt data
CREATE FUNCTION test_crypto(maxlen int) RETURNS bool AS $$
WITH random_string AS
(
  -- This generates a random string of 16366 bytes.  This is chosen
  -- as random to not make it compressible, so as the decompression
  -- would work on a string with the same length, making the test
  -- predictible.  lpad() ensures that the generated hexadecimal value
  -- is completed by extra 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, $1)
)
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;
$$ LANGUAGE SQL STRICT;