[patch 6/6] regression test updates - Mailing list pgsql-patches

From Marko Kreen
Subject [patch 6/6] regression test updates
Date
Msg-id 20050319234647.480556000@grue
Whole thread Raw
In response to [patch 0/6] pgcrypto update  (Marko Kreen <marko@l-t.ee>)
List pgsql-patches
* test error handling
* add tests for des, 3des, cast5
* add some tests to blowfish, rijndael
* Makefile: ability to specify different tests for different crypto
  libraries, so we can skip des, 3des and cast5 for builtin.


Index: pgsql/contrib/pgcrypto/sql/blowfish.sql
===================================================================
*** pgsql.orig/contrib/pgcrypto/sql/blowfish.sql
--- pgsql/contrib/pgcrypto/sql/blowfish.sql
*************** decode('6b77b4d63006dee605b156e274039793
*** 64,66 ****
--- 64,87 ----
  decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'),
  'bf-cbc'), 'hex');

+ -- blowfish-448
+ SELECT encode(encrypt(
+ decode('fedcba9876543210', 'hex'),
+
decode('f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455667704689104c2fd3b2f584023641aba61761f1f1f1f0e0e0e0effffffffffffffff',
'hex'),
+ 'bf-ecb/pad:none'), 'hex');
+ -- result: c04504012e4e1f53
+
+ -- empty data
+ select encode(    encrypt('', 'foo', 'bf'), 'hex');
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', 'bf'), 'hex');
+ -- 22 bytes key
+ select encode(    encrypt('foo', '0123456789012345678901', 'bf'), 'hex');
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'bf'), '0123456', 'bf');
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'bf'), 'hex');
+ select decrypt_iv(decode('95c7e89322525d59', 'hex'), '0123456', 'abcd', 'bf');
+
Index: pgsql/contrib/pgcrypto/sql/rijndael.sql
===================================================================
*** pgsql.orig/contrib/pgcrypto/sql/rijndael.sql
--- pgsql/contrib/pgcrypto/sql/rijndael.sql
*************** decode('0011223344', 'hex'),
*** 41,43 ****
--- 41,58 ----
  decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'),
  'aes-cbc'), 'hex');

+ -- empty data
+ select encode(    encrypt('', 'foo', 'aes'), 'hex');
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', 'aes'), 'hex');
+ -- 22 bytes key
+ select encode(    encrypt('foo', '0123456789012345678901', 'aes'), 'hex');
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'aes'), '0123456', 'aes');
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'aes'), 'hex');
+ select decrypt_iv(decode('2c24cb7da91d6d5699801268b0f5adad', 'hex'),
+         '0123456', 'abcd', 'aes');
+
Index: pgsql/contrib/pgcrypto/Makefile
===================================================================
*** pgsql.orig/contrib/pgcrypto/Makefile
--- pgsql/contrib/pgcrypto/Makefile
*************** ifeq ($(cryptolib), builtin)
*** 26,37 ****
--- 26,39 ----
  CRYPTO_CFLAGS =
  CRYPTO_LDFLAGS =
  SRCS = md5.c sha1.c internal.c blf.c rijndael.c
+ EXTRA_TESTS =
  endif

  ifeq ($(cryptolib), openssl)
  CRYPTO_CFLAGS = -I/usr/include/openssl
  CRYPTO_LDFLAGS = -lcrypto
  SRCS = openssl.c
+ EXTRA_TESTS = des 3des cast5
  endif

  ifeq ($(cryptsrc), builtin)
*************** PG_CPPFLAGS    = $(CRYPTO_CFLAGS) -I$(srcdi
*** 63,68 ****
--- 65,71 ----
  SHLIB_LINK     = $(CRYPTO_LDFLAGS)

  REGRESS = init md5 sha1 hmac-md5 hmac-sha1 blowfish rijndael \
+         $(EXTRA_TESTS) \
          crypt-des crypt-md5 crypt-blowfish crypt-xdes


Index: pgsql/contrib/pgcrypto/sql/des.sql
===================================================================
*** /dev/null
--- pgsql/contrib/pgcrypto/sql/des.sql
***************
*** 0 ****
--- 1,24 ----
+ --
+ -- DES cipher
+ --
+
+ -- no official test vectors atm
+
+ -- from blowfish.sql
+ SELECT encode(encrypt(
+ decode('0123456789abcdef', 'hex'),
+ decode('fedcba9876543210', 'hex'),
+ 'des-ecb/pad:none'), 'hex');
+
+ -- empty data
+ select encode(    encrypt('', 'foo', 'des'), 'hex');
+ -- 8 bytes key
+ select encode(    encrypt('foo', '01234589', 'des'), 'hex');
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'des'), '0123456', 'des');
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'des'), 'hex');
+ select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', 'des');
+
Index: pgsql/contrib/pgcrypto/sql/cast5.sql
===================================================================
*** /dev/null
--- pgsql/contrib/pgcrypto/sql/cast5.sql
***************
*** 0 ****
--- 1,42 ----
+ --
+ -- Cast5 cipher
+ --
+
+ -- 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');
+ -- 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');
+ -- 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');
+ -- result: 7A C8 16 D1 6E 9B 30 2E
+
+ -- cbc
+
+ -- empty data
+ select encode(    encrypt('', 'foo', 'cast5'), 'hex');
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', 'cast5'), 'hex');
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'cast5'), '0123456', 'cast5');
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'cast5'), 'hex');
+ select decrypt_iv(decode('384a970695ce016a', 'hex'),
+                 '0123456', 'abcd', 'cast5');
+
Index: pgsql/contrib/pgcrypto/expected/des.out
===================================================================
*** /dev/null
--- pgsql/contrib/pgcrypto/expected/des.out
***************
*** 0 ****
--- 1,48 ----
+ --
+ -- DES cipher
+ --
+ -- no official test vectors atm
+ -- from blowfish.sql
+ SELECT encode(encrypt(
+ decode('0123456789abcdef', 'hex'),
+ decode('fedcba9876543210', 'hex'),
+ 'des-ecb/pad:none'), 'hex');
+       encode
+ ------------------
+  ed39d950fa74bcc4
+ (1 row)
+
+ -- empty data
+ select encode(    encrypt('', 'foo', 'des'), 'hex');
+       encode
+ ------------------
+  752111e37a2d7ac3
+ (1 row)
+
+ -- 8 bytes key
+ select encode(    encrypt('foo', '01234589', 'des'), 'hex');
+       encode
+ ------------------
+  dec0f9c602b647a8
+ (1 row)
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'des'), '0123456', 'des');
+  decrypt
+ ---------
+  foo
+ (1 row)
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'des'), 'hex');
+       encode
+ ------------------
+  50735067b073bb93
+ (1 row)
+
+ select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', 'des');
+  decrypt_iv
+ ------------
+  foo
+ (1 row)
+
Index: pgsql/contrib/pgcrypto/expected/3des.out
===================================================================
*** /dev/null
--- pgsql/contrib/pgcrypto/expected/3des.out
***************
*** 0 ****
--- 1,56 ----
+ --
+ -- 3DES cipher
+ --
+ -- test vector from somewhere
+ SELECT encode(encrypt(
+ decode('80 00 00 00 00 00 00 00', 'hex'),
+ decode('01 01 01 01 01 01 01 01
+     01 01 01 01 01 01 01 01
+     01 01 01 01 01 01 01 01', 'hex'),
+ '3des-ecb/pad:none'), 'hex');
+       encode
+ ------------------
+  95f8a5e5dd31d900
+ (1 row)
+
+ -- val 95 F8 A5 E5 DD 31 D9 00
+ select encode(    encrypt('', 'foo', '3des'), 'hex');
+       encode
+ ------------------
+  9b641a6936249eb4
+ (1 row)
+
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', '3des'), 'hex');
+       encode
+ ------------------
+  6f02b7076a366504
+ (1 row)
+
+ -- 22 bytes key
+ select encode(    encrypt('foo', '0123456789012345678901', '3des'), 'hex');
+       encode
+ ------------------
+  a44360e699269817
+ (1 row)
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', '3des'), '0123456', '3des');
+  decrypt
+ ---------
+  foo
+ (1 row)
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', '3des'), 'hex');
+       encode
+ ------------------
+  df27c264fb24ed7a
+ (1 row)
+
+ select decrypt_iv(decode('df27c264fb24ed7a', 'hex'), '0123456', 'abcd', '3des');
+  decrypt_iv
+ ------------
+  foo
+ (1 row)
+
Index: pgsql/contrib/pgcrypto/expected/cast5.out
===================================================================
*** /dev/null
--- pgsql/contrib/pgcrypto/expected/cast5.out
***************
*** 0 ****
--- 1,73 ----
+ --
+ -- Cast5 cipher
+ --
+ -- 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');
+       encode
+ ------------------
+  238b4fe5847e44b2
+ (1 row)
+
+ -- 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');
+       encode
+ ------------------
+  eb6a711a2c02271b
+ (1 row)
+
+ -- 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');
+       encode
+ ------------------
+  7ac816d16e9b302e
+ (1 row)
+
+ -- result: 7A C8 16 D1 6E 9B 30 2E
+ -- cbc
+ -- empty data
+ select encode(    encrypt('', 'foo', 'cast5'), 'hex');
+       encode
+ ------------------
+  a48bd1aabde4de10
+ (1 row)
+
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', 'cast5'), 'hex');
+       encode
+ ------------------
+  b07f19255e60cb6d
+ (1 row)
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'cast5'), '0123456', 'cast5');
+  decrypt
+ ---------
+  foo
+ (1 row)
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'cast5'), 'hex');
+       encode
+ ------------------
+  384a970695ce016a
+ (1 row)
+
+ select decrypt_iv(decode('384a970695ce016a', 'hex'),
+                 '0123456', 'abcd', 'cast5');
+  decrypt_iv
+ ------------
+  foo
+ (1 row)
+
Index: pgsql/contrib/pgcrypto/sql/3des.sql
===================================================================
*** /dev/null
--- pgsql/contrib/pgcrypto/sql/3des.sql
***************
*** 0 ****
--- 1,26 ----
+ --
+ -- 3DES cipher
+ --
+
+ -- test vector from somewhere
+ SELECT encode(encrypt(
+ decode('80 00 00 00 00 00 00 00', 'hex'),
+ decode('01 01 01 01 01 01 01 01
+     01 01 01 01 01 01 01 01
+     01 01 01 01 01 01 01 01', 'hex'),
+ '3des-ecb/pad:none'), 'hex');
+ -- val 95 F8 A5 E5 DD 31 D9 00
+
+ select encode(    encrypt('', 'foo', '3des'), 'hex');
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', '3des'), 'hex');
+ -- 22 bytes key
+ select encode(    encrypt('foo', '0123456789012345678901', '3des'), 'hex');
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', '3des'), '0123456', '3des');
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', '3des'), 'hex');
+ select decrypt_iv(decode('df27c264fb24ed7a', 'hex'), '0123456', 'abcd', '3des');
+
Index: pgsql/contrib/pgcrypto/expected/blowfish.out
===================================================================
*** pgsql.orig/contrib/pgcrypto/expected/blowfish.out
--- pgsql/contrib/pgcrypto/expected/blowfish.out
*************** decode('37363534333231204e6f772069732074
*** 106,108 ****
--- 106,160 ----
   3ea6357a0ee7fad6d0c4b63464f2aafa40c2e91b4b7e1bba8114932fd92b5c8f111e7e50e7b2e541
  (1 row)

+ -- blowfish-448
+ SELECT encode(encrypt(
+ decode('fedcba9876543210', 'hex'),
+
decode('f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455667704689104c2fd3b2f584023641aba61761f1f1f1f0e0e0e0effffffffffffffff',
'hex'),
+ 'bf-ecb/pad:none'), 'hex');
+       encode
+ ------------------
+  c04504012e4e1f53
+ (1 row)
+
+ -- result: c04504012e4e1f53
+ -- empty data
+ select encode(    encrypt('', 'foo', 'bf'), 'hex');
+       encode
+ ------------------
+  1871949bb2311c8e
+ (1 row)
+
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', 'bf'), 'hex');
+       encode
+ ------------------
+  42f58af3b2c03f46
+ (1 row)
+
+ -- 22 bytes key
+ select encode(    encrypt('foo', '0123456789012345678901', 'bf'), 'hex');
+       encode
+ ------------------
+  86ab6f0bc72b5f22
+ (1 row)
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'bf'), '0123456', 'bf');
+  decrypt
+ ---------
+  foo
+ (1 row)
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'bf'), 'hex');
+       encode
+ ------------------
+  95c7e89322525d59
+ (1 row)
+
+ select decrypt_iv(decode('95c7e89322525d59', 'hex'), '0123456', 'abcd', 'bf');
+  decrypt_iv
+ ------------
+  foo
+ (1 row)
+
Index: pgsql/contrib/pgcrypto/expected/rijndael.out
===================================================================
*** pgsql.orig/contrib/pgcrypto/expected/rijndael.out
--- pgsql/contrib/pgcrypto/expected/rijndael.out
*************** decode('000102030405060708090a0b0c0d0e0f
*** 67,69 ****
--- 67,111 ----
   4facb6a041d53e0a5a73289170901fe7
  (1 row)

+ -- empty data
+ select encode(    encrypt('', 'foo', 'aes'), 'hex');
+               encode
+ ----------------------------------
+  b48cc3338a2eb293b6007ef72c360d48
+ (1 row)
+
+ -- 10 bytes key
+ select encode(    encrypt('foo', '0123456789', 'aes'), 'hex');
+               encode
+ ----------------------------------
+  f397f03d2819b7172b68d0706fda4693
+ (1 row)
+
+ -- 22 bytes key
+ select encode(    encrypt('foo', '0123456789012345678901', 'aes'), 'hex');
+               encode
+ ----------------------------------
+  5c9db77af02b4678117bcd8a71ae7f53
+ (1 row)
+
+ -- decrypt
+ select decrypt(encrypt('foo', '0123456', 'aes'), '0123456', 'aes');
+  decrypt
+ ---------
+  foo
+ (1 row)
+
+ -- iv
+ select encode(encrypt_iv('foo', '0123456', 'abcd', 'aes'), 'hex');
+               encode
+ ----------------------------------
+  2c24cb7da91d6d5699801268b0f5adad
+ (1 row)
+
+ select decrypt_iv(decode('2c24cb7da91d6d5699801268b0f5adad', 'hex'),
+         '0123456', 'abcd', 'aes');
+  decrypt_iv
+ ------------
+  foo
+ (1 row)
+
Index: pgsql/contrib/pgcrypto/expected/init.out
===================================================================
*** pgsql.orig/contrib/pgcrypto/expected/init.out
--- pgsql/contrib/pgcrypto/expected/init.out
*************** SELECT decode('666f6f', 'hex');
*** 15,17 ****
--- 15,26 ----
   foo
  (1 row)

+ -- check error handling
+ select gen_salt('foo');
+ ERROR:  gen_salt: Unknown salt algorithm
+ select digest('foo', 'foo');
+ ERROR:  Cannot use "foo": No such hash algorithm
+ select hmac('foo', 'foo', 'foo');
+ ERROR:  Cannot use "foo": No such hash algorithm
+ select encrypt('foo', 'foo', 'foo');
+ ERROR:  Cannot use "foo": No such cipher algorithm
Index: pgsql/contrib/pgcrypto/sql/init.sql
===================================================================
*** pgsql.orig/contrib/pgcrypto/sql/init.sql
--- pgsql/contrib/pgcrypto/sql/init.sql
***************
*** 10,12 ****
--- 10,18 ----
  SELECT encode('foo', 'hex');
  SELECT decode('666f6f', 'hex');

+ -- check error handling
+ select gen_salt('foo');
+ select digest('foo', 'foo');
+ select hmac('foo', 'foo', 'foo');
+ select encrypt('foo', 'foo', 'foo');
+

--

pgsql-patches by date:

Previous
From: Marko Kreen
Date:
Subject: [patch 1/6] remove support for mhash/mcrypt
Next
From: Marko Kreen
Date:
Subject: [patch 4/6] openssl.c: 3DES and AES support