mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-25 13:17:41 +03:00 
			
		
		
		
	This was from before the hex format was available in bytea. Now we can remove the extra explicit encoding/decoding calls and rely on the default output format. Discussion: https://www.postgresql.org/message-id/flat/17dcb4f7-7ac1-e2b6-d5f7-2dfba06cd9ee%40enterprisedb.com
		
			
				
	
	
		
			215 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			215 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
| --
 | |
| -- PGP Armor
 | |
| --
 | |
| 
 | |
| select armor('');
 | |
| select armor('test');
 | |
| select encode(dearmor(armor('')), 'escape');
 | |
| select encode(dearmor(armor('zooka')), 'escape');
 | |
| 
 | |
| select armor('0123456789abcdef0123456789abcdef0123456789abcdef
 | |
| 0123456789abcdef0123456789abcdef0123456789abcdef');
 | |
| 
 | |
| -- lots formatting
 | |
| select encode(dearmor(' a pgp msg:
 | |
| 
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| Comment: Some junk
 | |
| 
 | |
| em9va2E=
 | |
| 
 | |
|   =D5cR
 | |
| 
 | |
| -----END PGP MESSAGE-----'), 'escape');
 | |
| 
 | |
| -- lots messages
 | |
| select encode(dearmor('
 | |
| wrong packet:
 | |
|   -----BEGIN PGP MESSAGE-----
 | |
| 
 | |
|   d3Jvbmc=
 | |
|   =vCYP
 | |
|   -----END PGP MESSAGE-----
 | |
| 
 | |
| right packet:
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| 
 | |
| cmlnaHQ=
 | |
| =nbpj
 | |
| -----END PGP MESSAGE-----
 | |
| 
 | |
| use only first packet
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| 
 | |
| d3Jvbmc=
 | |
| =vCYP
 | |
| -----END PGP MESSAGE-----
 | |
| '), 'escape');
 | |
| 
 | |
| -- bad crc
 | |
| select dearmor('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- corrupt (no space after the colon)
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| foo:
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- corrupt (no empty line)
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- no headers
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- header with empty value
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| foo: 
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- simple
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| fookey: foovalue
 | |
| barkey: barvalue
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- insane keys, part 1
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| insane:key : 
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- insane keys, part 2
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| insane:key : text value here
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- long value
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| long: this value is more than 76 characters long, but it should still parse correctly as that''s permitted by RFC 4880
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- long value, split up
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| long: this value is more than 76 characters long, but it should still 
 | |
| long: parse correctly as that''s permitted by RFC 4880
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- long value, split up, part 2
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| long: this value is more than 
 | |
| long: 76 characters long, but it should still 
 | |
| long: parse correctly as that''s permitted by RFC 4880
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- long value, split up, part 3
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| emptykey: 
 | |
| long: this value is more than 
 | |
| emptykey: 
 | |
| long: 76 characters long, but it should still 
 | |
| emptykey: 
 | |
| long: parse correctly as that''s permitted by RFC 4880
 | |
| emptykey: 
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| select * from pgp_armor_headers('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| Comment: dat1.blowfish.sha1.mdc.s2k3.z0
 | |
| 
 | |
| jA0EBAMCfFNwxnvodX9g0jwB4n4s26/g5VmKzVab1bX1SmwY7gvgvlWdF3jKisvS
 | |
| yA6Ce1QTMK3KdL2MPfamsTUSAML8huCJMwYQFfE=
 | |
| =JcP+
 | |
| -----END PGP MESSAGE-----
 | |
| ');
 | |
| 
 | |
| -- test CR+LF line endings
 | |
| select * from pgp_armor_headers(replace('
 | |
| -----BEGIN PGP MESSAGE-----
 | |
| fookey: foovalue
 | |
| barkey: barvalue
 | |
| 
 | |
| em9va2E=
 | |
| =ZZZZ
 | |
| -----END PGP MESSAGE-----
 | |
| ', E'\n', E'\r\n'));
 | |
| 
 | |
| -- test header generation
 | |
| select armor('zooka', array['foo'], array['bar']);
 | |
| select armor('zooka', array['Version', 'Comment'], array['Created by pgcrypto', 'PostgreSQL, the world''s most advanced open source database']);
 | |
| select * from pgp_armor_headers(
 | |
|   armor('zooka', array['Version', 'Comment'],
 | |
|                  array['Created by pgcrypto', 'PostgreSQL, the world''s most advanced open source database']));
 | |
| 
 | |
| -- error/corner cases
 | |
| select armor('', array['foo'], array['too', 'many']);
 | |
| select armor('', array['too', 'many'], array['foo']);
 | |
| select armor('', array[['']], array['foo']);
 | |
| select armor('', array['foo'], array[['']]);
 | |
| select armor('', array[null], array['foo']);
 | |
| select armor('', array['foo'], array[null]);
 | |
| select armor('', '[0:0]={"foo"}', array['foo']);
 | |
| select armor('', array['foo'], '[0:0]={"foo"}');
 | |
| select armor('', array[E'embedded\nnewline'], array['foo']);
 | |
| select armor('', array['foo'], array[E'embedded\nnewline']);
 | |
| select armor('', array['embedded: colon+space'], array['foo']);
 |