Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd51df91

Browse files
committed
As Kris Jurka found out, pgcrypto does not work with
OpenSSL 0.9.6x. The DES functions use the older 'des_'API, but the newer 3DES functions use the 0.9.7x-only'DES_' API.I think I just used /usr/include/openssl/des.h for referencewhen implementing them, and had upgraded OpenSSL in themeantime.Following patch converts DES also to newer API and providescompatibility functions for OpenSSL < 0.9.7.I chose this route because:- openssl.c uses few DES functions.- compatibility for old 'des_' API is going away at some point of time from OpenSSL.- as seen from macros, new API is saner- Thus pgcrypto supports any OpenSSL version from 0.9.5 to 1.0Tested with OpenSSL 0.9.6c and 0.9.7e.Marko Kreen
1 parente94dd6a commitd51df91

File tree

1 file changed

+38
-18
lines changed

1 file changed

+38
-18
lines changed

‎contrib/pgcrypto/openssl.c

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
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>
@@ -50,6 +50,26 @@
5050
#include<openssl/aes.h>
5151
#endif
5252

53+
/*
54+
* Compatibility with older OpenSSL API for DES.
55+
*/
56+
#ifOPENSSL_VERSION_NUMBER<0x00907000L
57+
#defineDES_key_schedule des_key_schedule
58+
#defineDES_cblock des_cblock
59+
#defineDES_set_key(k,ks) \
60+
des_set_key((k), *(ks))
61+
#defineDES_ecb_encrypt(i,o,k,e) \
62+
des_ecb_encrypt((i), (o), *(k), (e))
63+
#defineDES_ncbc_encrypt(i,o,l,k,iv,e) \
64+
des_ncbc_encrypt((i), (o), (l), *(k), (iv), (e))
65+
#defineDES_ecb3_encrypt(i,o,k1,k2,k3,e) \
66+
des_ecb3_encrypt((des_cblock *)(i), (des_cblock *)(o), \
67+
*(k1), *(k2), *(k3), (e))
68+
#defineDES_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;
179199
struct
180200
{
181-
des_key_schedulekey_schedule;
201+
DES_key_schedulekey_schedule;
182202
}des;
183203
struct
184204
{
185-
des_key_schedulek1,k2,k3;
205+
DES_key_schedulek1,k2,k3;
186206
}des3;
187207
CAST_KEYcast_key;
188208
#ifdefGOT_AES
@@ -318,11 +338,11 @@ static int
318338
ossl_des_init(PX_Cipher*c,constuint8*key,unsignedklen,constuint8*iv)
319339
{
320340
ossldata*od=c->ptr;
321-
des_cblockxkey;
341+
DES_cblockxkey;
322342

323343
memset(&xkey,0,sizeof(xkey));
324344
memcpy(&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);
326346
memset(&xkey,0,sizeof(xkey));
327347

328348
if (iv)
@@ -341,9 +361,9 @@ ossl_des_ecb_encrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
341361
ossldata*od=c->ptr;
342362

343363
for (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);
347367
return0;
348368
}
349369

@@ -356,9 +376,9 @@ ossl_des_ecb_decrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
356376
ossldata*od=c->ptr;
357377

358378
for (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);
362382
return0;
363383
}
364384

@@ -368,8 +388,8 @@ ossl_des_cbc_encrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
368388
{
369389
ossldata*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);
373393
return0;
374394
}
375395

@@ -379,8 +399,8 @@ ossl_des_cbc_decrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
379399
{
380400
ossldata*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);
384404
return0;
385405
}
386406

@@ -390,7 +410,7 @@ static int
390410
ossl_des3_init(PX_Cipher*c,constuint8*key,unsignedklen,constuint8*iv)
391411
{
392412
ossldata*od=c->ptr;
393-
des_cblockxkey1,
413+
DES_cblockxkey1,
394414
xkey2,
395415
xkey3;
396416

@@ -453,7 +473,7 @@ ossl_des3_cbc_encrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
453473

454474
DES_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);
457477
return0;
458478
}
459479

@@ -465,7 +485,7 @@ ossl_des3_cbc_decrypt(PX_Cipher * c, const uint8 *data, unsigned dlen,
465485

466486
DES_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);
469489
return0;
470490
}
471491

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp