Skip to content

Commit

Permalink
[BACKPORT 2.20][yugabyte#19734] ysql: Import 'Add alternative output …
Browse files Browse the repository at this point in the history
…for OpenSSL 3 without legacy loaded'

Summary:
Original commit: 57a2ef8 / D29737
Import upstream PG commit 'Add alternative output for OpenSSL 3 without legacy loaded'.

This is a prerequisite to upgrading OpenSSL to 3.0+.

Original Commit: 19e91a40bf26530788d1dae39fa3e7e5a52ca7b2

Original Description:

```
OpenSSL 3 introduced the concept of providers to support modularization,
and moved the outdated ciphers to the new legacy provider. In case it's
not loaded in the users openssl.cnf file there will be a lot of regress
test failures, so add alternative outputs covering those.

Also document the need to load the legacy provider in order to use older
ciphers with OpenSSL-enabled pgcrypto.

This will be backpatched to all supported version once there is sufficient
testing in the buildfarm of OpenSSL 3.

Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/FEF81714-D479-4512-839B-C769D2605F8A@yesql.se
Backpatch-through: 9.6
```

Upstream Commit Link: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=72bbff4cd6eaf55239ccef79cec61766b5f8f1d2

Backport-through: 2.14
Jira: DB-8564

Test Plan: Jenkins

Reviewers: rthallam, jason

Reviewed By: jason

Subscribers: smishra, jason, yql, rthallam

Tags: #jenkins-ready

Differential Revision: https://phorge.dev.yugabyte.com/D29869
  • Loading branch information
es1024 committed Nov 14, 2023
1 parent 7bb072c commit 86c04b0
Show file tree
Hide file tree
Showing 11 changed files with 2,501 additions and 0 deletions.
95 changes: 95 additions & 0 deletions src/postgres/contrib/pgcrypto/expected/blowfish_1.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
--
-- Blowfish cipher
--
-- ensure consistent test output regardless of the default bytea format
SET bytea_output TO escape;
-- some standard Blowfish testvalues
SELECT encode(encrypt(
decode('0000000000000000', 'hex'),
decode('0000000000000000', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
SELECT encode(encrypt(
decode('ffffffffffffffff', 'hex'),
decode('ffffffffffffffff', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
SELECT encode(encrypt(
decode('1000000000000001', 'hex'),
decode('3000000000000000', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
SELECT encode(encrypt(
decode('1111111111111111', 'hex'),
decode('1111111111111111', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
SELECT encode(encrypt(
decode('0123456789abcdef', 'hex'),
decode('fedcba9876543210', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
SELECT encode(encrypt(
decode('01a1d6d039776742', 'hex'),
decode('fedcba9876543210', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
SELECT encode(encrypt(
decode('ffffffffffffffff', 'hex'),
decode('0000000000000000', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- setkey
SELECT encode(encrypt(
decode('fedcba9876543210', 'hex'),
decode('f0e1d2c3b4a5968778695a4b3c2d1e0f', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- with padding
SELECT encode(encrypt(
decode('01234567890123456789', 'hex'),
decode('33443344334433443344334433443344', 'hex'),
'bf-ecb'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- cbc
-- 28 bytes key
SELECT encode(encrypt(
decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5', 'hex'),
decode('37363534333231204e6f77206973207468652074696d6520666f7220', 'hex'),
'bf-cbc'), 'hex');
ERROR: encrypt error: Key was too big
-- 29 bytes key
SELECT encode(encrypt(
decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex'),
decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'),
'bf-cbc'), 'hex');
ERROR: encrypt error: Key was too big
-- blowfish-448
SELECT encode(encrypt(
decode('fedcba9876543210', 'hex'),
decode('f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455667704689104c2fd3b2f584023641aba61761f1f1f1f0e0e0e0effffffffffffffff', 'hex'),
'bf-ecb/pad:none'), 'hex');
ERROR: encrypt error: Key was too big
-- result: c04504012e4e1f53
-- empty data
select encode(encrypt('', 'foo', 'bf'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- 10 bytes key
select encode(encrypt('foo', '0123456789', 'bf'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- 22 bytes key
select encode(encrypt('foo', '0123456789012345678901', 'bf'), 'hex');
ERROR: encrypt error: Key was too big
-- decrypt
select decrypt(encrypt('foo', '0123456', 'bf'), '0123456', 'bf');
ERROR: encrypt error: Cipher cannot be initialized ?
-- iv
select encode(encrypt_iv('foo', '0123456', 'abcd', 'bf'), 'hex');
ERROR: encrypt_iv error: Cipher cannot be initialized ?
select decrypt_iv(decode('95c7e89322525d59', 'hex'), '0123456', 'abcd', 'bf');
ERROR: decrypt_iv error: Cipher cannot be initialized ?
-- long message
select encode(encrypt('Lets try a longer message.', '0123456789', 'bf'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
select decrypt(encrypt('Lets try a longer message.', '0123456789', 'bf'), '0123456789', 'bf');
ERROR: encrypt error: Cipher cannot be initialized ?
48 changes: 48 additions & 0 deletions src/postgres/contrib/pgcrypto/expected/cast5_1.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
--
-- Cast5 cipher
--
-- ensure consistent test output regardless of the default bytea format
SET bytea_output TO escape;
-- test vectors from RFC2144
-- 128 bit key
SELECT encode(encrypt(
decode('01 23 45 67 89 AB CD EF', 'hex'),
decode('01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A', 'hex'),
'cast5-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- result: 23 8B 4F E5 84 7E 44 B2
-- 80 bit key
SELECT encode(encrypt(
decode('01 23 45 67 89 AB CD EF', 'hex'),
decode('01 23 45 67 12 34 56 78 23 45', 'hex'),
'cast5-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- result: EB 6A 71 1A 2C 02 27 1B
-- 40 bit key
SELECT encode(encrypt(
decode('01 23 45 67 89 AB CD EF', 'hex'),
decode('01 23 45 67 12', 'hex'),
'cast5-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- result: 7A C8 16 D1 6E 9B 30 2E
-- cbc
-- empty data
select encode( encrypt('', 'foo', 'cast5'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- 10 bytes key
select encode( encrypt('foo', '0123456789', 'cast5'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- decrypt
select decrypt(encrypt('foo', '0123456', 'cast5'), '0123456', 'cast5');
ERROR: encrypt error: Cipher cannot be initialized ?
-- iv
select encode(encrypt_iv('foo', '0123456', 'abcd', 'cast5'), 'hex');
ERROR: encrypt_iv error: Cipher cannot be initialized ?
select decrypt_iv(decode('384a970695ce016a', 'hex'),
'0123456', 'abcd', 'cast5');
ERROR: decrypt_iv error: Cipher cannot be initialized ?
-- long message
select encode(encrypt('Lets try a longer message.', '0123456789', 'cast5'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
select decrypt(encrypt('Lets try a longer message.', '0123456789', 'cast5'), '0123456789', 'cast5');
ERROR: encrypt error: Cipher cannot be initialized ?
31 changes: 31 additions & 0 deletions src/postgres/contrib/pgcrypto/expected/des_1.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
--
-- DES cipher
--
-- ensure consistent test output regardless of the default bytea format
SET bytea_output TO escape;
-- no official test vectors atm
-- from blowfish.sql
SELECT encode(encrypt(
decode('0123456789abcdef', 'hex'),
decode('fedcba9876543210', 'hex'),
'des-ecb/pad:none'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- empty data
select encode( encrypt('', 'foo', 'des'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- 8 bytes key
select encode( encrypt('foo', '01234589', 'des'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
-- decrypt
select decrypt(encrypt('foo', '0123456', 'des'), '0123456', 'des');
ERROR: encrypt error: Cipher cannot be initialized ?
-- iv
select encode(encrypt_iv('foo', '0123456', 'abcd', 'des'), 'hex');
ERROR: encrypt_iv error: Cipher cannot be initialized ?
select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', 'des');
ERROR: decrypt_iv error: Cipher cannot be initialized ?
-- long message
select encode(encrypt('Lets try a longer message.', '01234567', 'des'), 'hex');
ERROR: encrypt error: Cipher cannot be initialized ?
select decrypt(encrypt('Lets try a longer message.', '01234567', 'des'), '01234567', 'des');
ERROR: encrypt error: Cipher cannot be initialized ?
Loading

0 comments on commit 86c04b0

Please sign in to comment.