mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +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
		
			
				
	
	
		
			371 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			371 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
--
 | 
						|
-- PGP Armor
 | 
						|
--
 | 
						|
select armor('');
 | 
						|
            armor            
 | 
						|
-----------------------------
 | 
						|
 -----BEGIN PGP MESSAGE-----+
 | 
						|
                            +
 | 
						|
 =twTO                      +
 | 
						|
 -----END PGP MESSAGE-----  +
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
select armor('test');
 | 
						|
            armor            
 | 
						|
-----------------------------
 | 
						|
 -----BEGIN PGP MESSAGE-----+
 | 
						|
                            +
 | 
						|
 dGVzdA==                   +
 | 
						|
 =+G7Q                      +
 | 
						|
 -----END PGP MESSAGE-----  +
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
select encode(dearmor(armor('')), 'escape');
 | 
						|
 encode 
 | 
						|
--------
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
select encode(dearmor(armor('zooka')), 'escape');
 | 
						|
 encode 
 | 
						|
--------
 | 
						|
 zooka
 | 
						|
(1 row)
 | 
						|
 | 
						|
select armor('0123456789abcdef0123456789abcdef0123456789abcdef
 | 
						|
0123456789abcdef0123456789abcdef0123456789abcdef');
 | 
						|
                                    armor                                     
 | 
						|
------------------------------------------------------------------------------
 | 
						|
 -----BEGIN PGP MESSAGE-----                                                 +
 | 
						|
                                                                             +
 | 
						|
 MDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmCjAxMjM0NTY3+
 | 
						|
 ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZg==                    +
 | 
						|
 =JFw5                                                                       +
 | 
						|
 -----END PGP MESSAGE-----                                                   +
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- lots formatting
 | 
						|
select encode(dearmor(' a pgp msg:
 | 
						|
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
Comment: Some junk
 | 
						|
 | 
						|
em9va2E=
 | 
						|
 | 
						|
  =D5cR
 | 
						|
 | 
						|
-----END PGP MESSAGE-----'), 'escape');
 | 
						|
 encode 
 | 
						|
--------
 | 
						|
 zooka
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- 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');
 | 
						|
 encode 
 | 
						|
--------
 | 
						|
 right
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- bad crc
 | 
						|
select dearmor('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
ERROR:  Corrupt ascii-armor
 | 
						|
-- corrupt (no space after the colon)
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
foo:
 | 
						|
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
ERROR:  Corrupt ascii-armor
 | 
						|
-- corrupt (no empty line)
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
ERROR:  Corrupt ascii-armor
 | 
						|
-- no headers
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
 key | value 
 | 
						|
-----+-------
 | 
						|
(0 rows)
 | 
						|
 | 
						|
-- header with empty value
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
foo: 
 | 
						|
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
 key | value 
 | 
						|
-----+-------
 | 
						|
 foo | 
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- simple
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
fookey: foovalue
 | 
						|
barkey: barvalue
 | 
						|
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
  key   |  value   
 | 
						|
--------+----------
 | 
						|
 fookey | foovalue
 | 
						|
 barkey | barvalue
 | 
						|
(2 rows)
 | 
						|
 | 
						|
-- insane keys, part 1
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
insane:key : 
 | 
						|
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
     key     | value 
 | 
						|
-------------+-------
 | 
						|
 insane:key  | 
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- insane keys, part 2
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
insane:key : text value here
 | 
						|
 | 
						|
em9va2E=
 | 
						|
=ZZZZ
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
     key     |      value      
 | 
						|
-------------+-----------------
 | 
						|
 insane:key  | text value here
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- 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-----
 | 
						|
');
 | 
						|
 key  |                                                      value                                                      
 | 
						|
------+-----------------------------------------------------------------------------------------------------------------
 | 
						|
 long | this value is more than 76 characters long, but it should still parse correctly as that's permitted by RFC 4880
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- 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-----
 | 
						|
');
 | 
						|
 key  |                              value                               
 | 
						|
------+------------------------------------------------------------------
 | 
						|
 long | this value is more than 76 characters long, but it should still 
 | 
						|
 long | parse correctly as that's permitted by RFC 4880
 | 
						|
(2 rows)
 | 
						|
 | 
						|
-- 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-----
 | 
						|
');
 | 
						|
 key  |                      value                      
 | 
						|
------+-------------------------------------------------
 | 
						|
 long | this value is more than 
 | 
						|
 long | 76 characters long, but it should still 
 | 
						|
 long | parse correctly as that's permitted by RFC 4880
 | 
						|
(3 rows)
 | 
						|
 | 
						|
-- 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-----
 | 
						|
');
 | 
						|
   key    |                      value                      
 | 
						|
----------+-------------------------------------------------
 | 
						|
 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 | 
 | 
						|
(7 rows)
 | 
						|
 | 
						|
select * from pgp_armor_headers('
 | 
						|
-----BEGIN PGP MESSAGE-----
 | 
						|
Comment: dat1.blowfish.sha1.mdc.s2k3.z0
 | 
						|
 | 
						|
jA0EBAMCfFNwxnvodX9g0jwB4n4s26/g5VmKzVab1bX1SmwY7gvgvlWdF3jKisvS
 | 
						|
yA6Ce1QTMK3KdL2MPfamsTUSAML8huCJMwYQFfE=
 | 
						|
=JcP+
 | 
						|
-----END PGP MESSAGE-----
 | 
						|
');
 | 
						|
   key   |             value              
 | 
						|
---------+--------------------------------
 | 
						|
 Comment | dat1.blowfish.sha1.mdc.s2k3.z0
 | 
						|
(1 row)
 | 
						|
 | 
						|
-- 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'));
 | 
						|
  key   |  value   
 | 
						|
--------+----------
 | 
						|
 fookey | foovalue
 | 
						|
 barkey | barvalue
 | 
						|
(2 rows)
 | 
						|
 | 
						|
-- test header generation
 | 
						|
select armor('zooka', array['foo'], array['bar']);
 | 
						|
            armor            
 | 
						|
-----------------------------
 | 
						|
 -----BEGIN PGP MESSAGE-----+
 | 
						|
 foo: bar                   +
 | 
						|
                            +
 | 
						|
 em9va2E=                   +
 | 
						|
 =D5cR                      +
 | 
						|
 -----END PGP MESSAGE-----  +
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
select armor('zooka', array['Version', 'Comment'], array['Created by pgcrypto', 'PostgreSQL, the world''s most advanced open source database']);
 | 
						|
                                armor                                
 | 
						|
---------------------------------------------------------------------
 | 
						|
 -----BEGIN PGP MESSAGE-----                                        +
 | 
						|
 Version: Created by pgcrypto                                       +
 | 
						|
 Comment: PostgreSQL, the world's most advanced open source database+
 | 
						|
                                                                    +
 | 
						|
 em9va2E=                                                           +
 | 
						|
 =D5cR                                                              +
 | 
						|
 -----END PGP MESSAGE-----                                          +
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
select * from pgp_armor_headers(
 | 
						|
  armor('zooka', array['Version', 'Comment'],
 | 
						|
                 array['Created by pgcrypto', 'PostgreSQL, the world''s most advanced open source database']));
 | 
						|
   key   |                           value                            
 | 
						|
---------+------------------------------------------------------------
 | 
						|
 Version | Created by pgcrypto
 | 
						|
 Comment | PostgreSQL, the world's most advanced open source database
 | 
						|
(2 rows)
 | 
						|
 | 
						|
-- error/corner cases
 | 
						|
select armor('', array['foo'], array['too', 'many']);
 | 
						|
ERROR:  mismatched array dimensions
 | 
						|
select armor('', array['too', 'many'], array['foo']);
 | 
						|
ERROR:  mismatched array dimensions
 | 
						|
select armor('', array[['']], array['foo']);
 | 
						|
ERROR:  wrong number of array subscripts
 | 
						|
select armor('', array['foo'], array[['']]);
 | 
						|
ERROR:  wrong number of array subscripts
 | 
						|
select armor('', array[null], array['foo']);
 | 
						|
ERROR:  null value not allowed for header key
 | 
						|
select armor('', array['foo'], array[null]);
 | 
						|
ERROR:  null value not allowed for header value
 | 
						|
select armor('', '[0:0]={"foo"}', array['foo']);
 | 
						|
            armor            
 | 
						|
-----------------------------
 | 
						|
 -----BEGIN PGP MESSAGE-----+
 | 
						|
 foo: foo                   +
 | 
						|
                            +
 | 
						|
 =twTO                      +
 | 
						|
 -----END PGP MESSAGE-----  +
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
select armor('', array['foo'], '[0:0]={"foo"}');
 | 
						|
            armor            
 | 
						|
-----------------------------
 | 
						|
 -----BEGIN PGP MESSAGE-----+
 | 
						|
 foo: foo                   +
 | 
						|
                            +
 | 
						|
 =twTO                      +
 | 
						|
 -----END PGP MESSAGE-----  +
 | 
						|
 
 | 
						|
(1 row)
 | 
						|
 | 
						|
select armor('', array[E'embedded\nnewline'], array['foo']);
 | 
						|
ERROR:  header key must not contain newlines
 | 
						|
select armor('', array['foo'], array[E'embedded\nnewline']);
 | 
						|
ERROR:  header value must not contain newlines
 | 
						|
select armor('', array['embedded: colon+space'], array['foo']);
 | 
						|
ERROR:  header key must not contain ": "
 |