crypto.sql
application/x-sql
Filename: crypto.sql
Type: application/x-sql
Part: 0
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;