2626 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2727 * SUCH DAMAGE.
2828 *
29- * $PostgreSQL: pgsql/contrib/pgcrypto/openssl.c,v 1.21 2005/07/1003:55:28 momjian Exp $
29+ * $PostgreSQL: pgsql/contrib/pgcrypto/openssl.c,v 1.22 2005/07/1013:54:34 momjian Exp $
3030 */
3131
3232#include <postgres.h>
5050#include <openssl/aes.h>
5151#endif
5252
53+ /*
54+ * Compatibility with older OpenSSL API for DES.
55+ */
56+ #if OPENSSL_VERSION_NUMBER < 0x00907000L
57+ #define DES_key_schedule des_key_schedule
58+ #define DES_cblock des_cblock
59+ #define DES_set_key (k ,ks ) \
60+ des_set_key((k), *(ks))
61+ #define DES_ecb_encrypt (i ,o ,k ,e ) \
62+ des_ecb_encrypt((i), (o), *(k), (e))
63+ #define DES_ncbc_encrypt (i ,o ,l ,k ,iv ,e ) \
64+ des_ncbc_encrypt((i), (o), (l), *(k), (iv), (e))
65+ #define DES_ecb3_encrypt (i ,o ,k1 ,k2 ,k3 ,e ) \
66+ des_ecb3_encrypt((des_cblock *)(i), (des_cblock *)(o), \
67+ *(k1), *(k2), *(k3), (e))
68+ #define DES_ede3_cbc_encrypt (i ,o ,l ,k1 ,k2 ,k3 ,iv ,e ) \
69+ des_ede3_cbc_encrypt((i), (o), \
70+ (l), *(k1), *(k2), *(k3), (iv), (e))
71+ #endif
72+
5373/*
5474 * Hashes
5575 */
@@ -178,11 +198,11 @@ typedef struct
178198}bf ;
179199struct
180200{
181- des_key_schedule key_schedule ;
201+ DES_key_schedule key_schedule ;
182202}des ;
183203struct
184204{
185- des_key_schedule k1 ,k2 ,k3 ;
205+ DES_key_schedule k1 ,k2 ,k3 ;
186206}des3 ;
187207CAST_KEY cast_key ;
188208#ifdef GOT_AES
@@ -318,11 +338,11 @@ static int
318338ossl_des_init (PX_Cipher * c ,const uint8 * key ,unsigned klen ,const uint8 * iv )
319339{
320340ossldata * od = c -> ptr ;
321- des_cblock xkey ;
341+ DES_cblock xkey ;
322342
323343memset (& xkey ,0 ,sizeof (xkey ));
324344memcpy (& xkey ,key ,klen > 8 ?8 :klen );
325- des_set_key (& xkey ,od -> u .des .key_schedule );
345+ DES_set_key (& xkey ,& od -> u .des .key_schedule );
326346memset (& xkey ,0 ,sizeof (xkey ));
327347
328348if (iv )
@@ -341,9 +361,9 @@ ossl_des_ecb_encrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
341361ossldata * od = c -> ptr ;
342362
343363for (i = 0 ;i < dlen /bs ;i ++ )
344- des_ecb_encrypt (( des_cblock * ) (data + i * bs ),
345- (des_cblock * ) (res + i * bs ),
346- od -> u .des .key_schedule ,1 );
364+ DES_ecb_encrypt (( DES_cblock * ) (data + i * bs ),
365+ (DES_cblock * ) (res + i * bs ),
366+ & od -> u .des .key_schedule ,1 );
347367return 0 ;
348368}
349369
@@ -356,9 +376,9 @@ ossl_des_ecb_decrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
356376ossldata * od = c -> ptr ;
357377
358378for (i = 0 ;i < dlen /bs ;i ++ )
359- des_ecb_encrypt (( des_cblock * ) (data + i * bs ),
360- (des_cblock * ) (res + i * bs ),
361- od -> u .des .key_schedule ,0 );
379+ DES_ecb_encrypt (( DES_cblock * ) (data + i * bs ),
380+ (DES_cblock * ) (res + i * bs ),
381+ & od -> u .des .key_schedule ,0 );
362382return 0 ;
363383}
364384
@@ -368,8 +388,8 @@ ossl_des_cbc_encrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
368388{
369389ossldata * od = c -> ptr ;
370390
371- des_ncbc_encrypt (data ,res ,dlen ,od -> u .des .key_schedule ,
372- (des_cblock * )od -> iv ,1 );
391+ DES_ncbc_encrypt (data ,res ,dlen ,& od -> u .des .key_schedule ,
392+ (DES_cblock * )od -> iv ,1 );
373393return 0 ;
374394}
375395
@@ -379,8 +399,8 @@ ossl_des_cbc_decrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
379399{
380400ossldata * od = c -> ptr ;
381401
382- des_ncbc_encrypt (data ,res ,dlen ,od -> u .des .key_schedule ,
383- (des_cblock * )od -> iv ,0 );
402+ DES_ncbc_encrypt (data ,res ,dlen ,& od -> u .des .key_schedule ,
403+ (DES_cblock * )od -> iv ,0 );
384404return 0 ;
385405}
386406
@@ -390,7 +410,7 @@ static int
390410ossl_des3_init (PX_Cipher * c ,const uint8 * key ,unsigned klen ,const uint8 * iv )
391411{
392412ossldata * od = c -> ptr ;
393- des_cblock xkey1 ,
413+ DES_cblock xkey1 ,
394414xkey2 ,
395415xkey3 ;
396416
@@ -453,7 +473,7 @@ ossl_des3_cbc_encrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
453473
454474DES_ede3_cbc_encrypt (data ,res ,dlen ,
455475& od -> u .des3 .k1 ,& od -> u .des3 .k2 ,& od -> u .des3 .k3 ,
456- (des_cblock * )od -> iv ,1 );
476+ (DES_cblock * )od -> iv ,1 );
457477return 0 ;
458478}
459479
@@ -465,7 +485,7 @@ ossl_des3_cbc_decrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
465485
466486DES_ede3_cbc_encrypt (data ,res ,dlen ,
467487& od -> u .des3 .k1 ,& od -> u .des3 .k2 ,& od -> u .des3 .k3 ,
468- (des_cblock * )od -> iv ,0 );
488+ (DES_cblock * )od -> iv ,0 );
469489return 0 ;
470490}
471491