summaryrefslogtreecommitdiffstats
path: root/contrib/pgcrypto/expected/pgp-compression.out
blob: d4c57feba30b84dc86c6a8287dbfef4c69fbf71e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
--
-- 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)