Commit 6a8eb1a7 authored by Neil Conway's avatar Neil Conway

pgcrypto update:

* 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.

Marko Kreen
parent 19b67686
# #
# $PostgreSQL: pgsql/contrib/pgcrypto/Makefile,v 1.13 2005/03/21 05:17:16 neilc Exp $ # $PostgreSQL: pgsql/contrib/pgcrypto/Makefile,v 1.14 2005/03/21 05:24:51 neilc Exp $
# #
# either 'builtin', 'openssl' # either 'builtin', 'openssl'
...@@ -26,12 +26,14 @@ ifeq ($(cryptolib), builtin) ...@@ -26,12 +26,14 @@ ifeq ($(cryptolib), builtin)
CRYPTO_CFLAGS = CRYPTO_CFLAGS =
CRYPTO_LDFLAGS = CRYPTO_LDFLAGS =
SRCS = md5.c sha1.c internal.c blf.c rijndael.c SRCS = md5.c sha1.c internal.c blf.c rijndael.c
EXTRA_TESTS =
endif endif
ifeq ($(cryptolib), openssl) ifeq ($(cryptolib), openssl)
CRYPTO_CFLAGS = -I/usr/include/openssl CRYPTO_CFLAGS = -I/usr/include/openssl
CRYPTO_LDFLAGS = -lcrypto CRYPTO_LDFLAGS = -lcrypto
SRCS = openssl.c SRCS = openssl.c
EXTRA_TESTS = des 3des cast5
endif endif
ifeq ($(cryptsrc), builtin) ifeq ($(cryptsrc), builtin)
...@@ -63,6 +65,7 @@ PG_CPPFLAGS = $(CRYPTO_CFLAGS) -I$(srcdir) ...@@ -63,6 +65,7 @@ PG_CPPFLAGS = $(CRYPTO_CFLAGS) -I$(srcdir)
SHLIB_LINK = $(CRYPTO_LDFLAGS) SHLIB_LINK = $(CRYPTO_LDFLAGS)
REGRESS = init md5 sha1 hmac-md5 hmac-sha1 blowfish rijndael \ REGRESS = init md5 sha1 hmac-md5 hmac-sha1 blowfish rijndael \
$(EXTRA_TESTS) \
crypt-des crypt-md5 crypt-blowfish crypt-xdes crypt-des crypt-md5 crypt-blowfish crypt-xdes
......
--
-- 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)
...@@ -106,3 +106,55 @@ decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'), ...@@ -106,3 +106,55 @@ decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'),
3ea6357a0ee7fad6d0c4b63464f2aafa40c2e91b4b7e1bba8114932fd92b5c8f111e7e50e7b2e541 3ea6357a0ee7fad6d0c4b63464f2aafa40c2e91b4b7e1bba8114932fd92b5c8f111e7e50e7b2e541
(1 row) (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)
--
-- 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)
--
-- 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)
...@@ -15,3 +15,12 @@ SELECT decode('666f6f', 'hex'); ...@@ -15,3 +15,12 @@ SELECT decode('666f6f', 'hex');
foo foo
(1 row) (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
...@@ -67,3 +67,45 @@ decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'), ...@@ -67,3 +67,45 @@ decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'),
4facb6a041d53e0a5a73289170901fe7 4facb6a041d53e0a5a73289170901fe7
(1 row) (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)
--
-- 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');
...@@ -64,3 +64,24 @@ decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex' ...@@ -64,3 +64,24 @@ decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex'
decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'), decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'),
'bf-cbc'), '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');
--
-- 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');
--
-- 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');
...@@ -10,3 +10,9 @@ ...@@ -10,3 +10,9 @@
SELECT encode('foo', 'hex'); SELECT encode('foo', 'hex');
SELECT decode('666f6f', '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');
...@@ -41,3 +41,18 @@ decode('0011223344', 'hex'), ...@@ -41,3 +41,18 @@ decode('0011223344', 'hex'),
decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'), decode('000102030405060708090a0b0c0d0e0f101112131415161718191a1b', 'hex'),
'aes-cbc'), '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');
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment