From e9f970891d1f96303a973cbc1c28cee436f24933 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Fri, 22 Mar 2002 02:33:24 +0000 Subject: [PATCH] Change des_old.h so OpenSSL 0.9.6 compatibility is default. One must define OPENSSL_DES_LIBDES_COMPATIBILITY to get libdes compatibility. At the same time, correct a couple of argument errors for the cfb encryption routines. Make destest use as much of the old API as possible, to make sure it works properly. Other tests will use the new API... --- crypto/des/des_old.c | 1 + crypto/des/des_old.h | 43 +++++++++++++------ crypto/des/destest.c | 99 +++++++++++++++++++++----------------------- 3 files changed, 79 insertions(+), 64 deletions(-) diff --git a/crypto/des/des_old.c b/crypto/des/des_old.c index e1c82da9b4..3cf9c9c8a2 100644 --- a/crypto/des/des_old.c +++ b/crypto/des/des_old.c @@ -72,6 +72,7 @@ * */ +#define OPENSSL_DES_LIBDES_COMPATIBILITY #include #include #include diff --git a/crypto/des/des_old.h b/crypto/des/des_old.h index 1eb25bd3e6..80e0167b73 100644 --- a/crypto/des/des_old.h +++ b/crypto/des/des_old.h @@ -3,13 +3,29 @@ /* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING * * The function names in here are deprecated and are only present to - * provide an interface compatible with libdes. OpenSSL now provides - * functions where "des_" has been replaced with "DES_" in the names, - * to make it possible to make incompatible changes that are needed - * for C type security and other stuff. + * provide an interface compatible with openssl 0.9.6 and older as + * well as libdes. OpenSSL now provides functions where "des_" has + * been replaced with "DES_" in the names, to make it possible to + * make incompatible changes that are needed for C type security and + * other stuff. + * + * This include files has two compatibility modes: + * + * - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API + * that is compatible with libdes and SSLeay. + * - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an + * API that is compatible with OpenSSL 0.9.5x to 0.9.6x. + * + * Note that these modes break earlier snapshots of OpenSSL, where + * libdes compatibility was the only available mode or (later on) the + * prefered compatibility mode. However, after much consideration + * (and more or less violent discussions with external parties), it + * was concluded that OpenSSL should be compatible with earlier versions + * of itself before anything else. Also, in all honesty, libdes is + * an old beast that shouldn't really be used any more. * * Please consider starting to use the DES_ functions rather than the - * des_ ones. The des_ functions will dissapear completely before + * des_ ones. The des_ functions will disappear completely before * OpenSSL 1.0! * * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING @@ -19,7 +35,7 @@ * project 2001. */ /* ==================================================================== - * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved. + * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -107,15 +123,16 @@ typedef struct _ossl_old_des_ks_struct } ks; } _ossl_old_des_key_schedule[16]; -#ifdef OPENSSL_DES_PRE_0_9_7_COMPATIBILITY +#ifndef OPENSSL_DES_LIBDES_COMPATIBILITY #define des_cblock DES_cblock +#define const_des_cblock const_DES_cblock #define des_key_schedule DES_key_schedule #define des_ecb3_encrypt(i,o,k1,k2,k3,e)\ DES_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e)) #define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) #define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) + DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) #define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) #define des_options()\ @@ -128,8 +145,8 @@ typedef struct _ossl_old_des_ks_struct DES_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) #define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ DES_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) -#define des_cfb_encrypt(i,o,l,k,iv,e)\ - DES_cfb_encrypt((i),(o),(l),(k),(iv),(e)) +#define des_cfb_encrypt(i,o,n,l,k,iv,e)\ + DES_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) #define des_ecb_encrypt(i,o,k,e)\ DES_ecb_encrypt((i),(o),(k),(e)) #define des_encrypt(d,k,e)\ @@ -206,7 +223,7 @@ typedef struct _ossl_old_des_ks_struct #define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\ _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) #define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\ - _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e)) + _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e)) #define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\ _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n)) #define des_options()\ @@ -219,8 +236,8 @@ typedef struct _ossl_old_des_ks_struct _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e)) #define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\ _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e)) -#define des_cfb_encrypt(i,o,l,k,iv,e)\ - _ossl_old_des_cfb_encrypt((i),(o),(l),(k),(iv),(e)) +#define des_cfb_encrypt(i,o,n,l,k,iv,e)\ + _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e)) #define des_ecb_encrypt(i,o,k,e)\ _ossl_old_des_ecb_encrypt((i),(o),(k),(e)) #define des_encrypt(d,k,e)\ diff --git a/crypto/des/destest.c b/crypto/des/destest.c index 88fe32a622..79f9a4e8e4 100644 --- a/crypto/des/destest.c +++ b/crypto/des/destest.c @@ -83,11 +83,8 @@ int main(int argc, char *argv[]) } #else #include -#include -#if defined(PERL5) || defined(__FreeBSD__) -#define crypt(c,s) (DES_crypt((c),(s))) -#endif +#define crypt(c,s) (des_crypt((c),(s))) /* tisk tisk - the test keys don't all have odd parity :-( */ /* test data */ @@ -333,8 +330,8 @@ static int ede_cfb64_test(unsigned char *cfb_cipher); int main(int argc, char *argv[]) { int i,j,err=0; - DES_cblock in,out,outin,iv3,iv2; - DES_key_schedule ks,ks2,ks3; + des_cblock in,out,outin,iv3,iv2; + des_key_schedule ks,ks2,ks3; unsigned char cbc_in[40]; unsigned char cbc_out[40]; DES_LONG cs; @@ -381,7 +378,7 @@ int main(int argc, char *argv[]) /* if (memcmp(cbc_out,cbc3_ok, (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) { - printf("DES_ede3_cbc_encrypt encrypt error\n"); + printf("des_ede3_cbc_encrypt encrypt error\n"); err=1; } */ @@ -392,7 +389,7 @@ int main(int argc, char *argv[]) { int n; - printf("DES_ede3_cbcm_encrypt decrypt error\n"); + printf("des_ede3_cbcm_encrypt decrypt error\n"); for(n=0 ; n < i ; ++n) printf(" %02x",cbc_data[n]); printf("\n"); @@ -410,8 +407,8 @@ int main(int argc, char *argv[]) memcpy(in,plain_data[i],8); memset(out,0,8); memset(outin,0,8); - DES_ecb_encrypt(&in,&out,&ks,DES_ENCRYPT); - DES_ecb_encrypt(&out,&outin,&ks,DES_DECRYPT); + des_ecb_encrypt(&in,&out,&ks,DES_ENCRYPT); + des_ecb_encrypt(&out,&outin,&ks,DES_DECRYPT); if (memcmp(out,cipher_data[i],8) != 0) { @@ -438,8 +435,8 @@ int main(int argc, char *argv[]) memcpy(in,plain_data[i],8); memset(out,0,8); memset(outin,0,8); - DES_ecb2_encrypt(&in,&out,&ks,&ks2,DES_ENCRYPT); - DES_ecb2_encrypt(&out,&outin,&ks,&ks2,DES_DECRYPT); + des_ecb2_encrypt(&in,&out,&ks,&ks2,DES_ENCRYPT); + des_ecb2_encrypt(&out,&outin,&ks,&ks2,DES_DECRYPT); if (memcmp(out,cipher_ecb2[i],8) != 0) { @@ -466,7 +463,7 @@ int main(int argc, char *argv[]) memset(cbc_out,0,40); memset(cbc_in,0,40); memcpy(iv3,cbc_iv,sizeof(cbc_iv)); - DES_ncbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,&ks, + des_ncbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,&ks, &iv3,DES_ENCRYPT); if (memcmp(cbc_out,cbc_ok,32) != 0) { @@ -475,7 +472,7 @@ int main(int argc, char *argv[]) } memcpy(iv3,cbc_iv,sizeof(cbc_iv)); - DES_ncbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,&ks, + des_ncbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,&ks, &iv3,DES_DECRYPT); if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)) != 0) { @@ -493,19 +490,19 @@ int main(int argc, char *argv[]) memset(cbc_out,0,40); memset(cbc_in,0,40); memcpy(iv3,cbc_iv,sizeof(cbc_iv)); - DES_xcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,&ks, + des_xcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,&ks, &iv3,&cbc2_key,&cbc3_key, DES_ENCRYPT); if (memcmp(cbc_out,xcbc_ok,32) != 0) { - printf("DES_xcbc_encrypt encrypt error\n"); + printf("des_xcbc_encrypt encrypt error\n"); err=1; } memcpy(iv3,cbc_iv,sizeof(cbc_iv)); - DES_xcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,&ks, + des_xcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,&ks, &iv3,&cbc2_key,&cbc3_key, DES_DECRYPT); if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0) { - printf("DES_xcbc_encrypt decrypt error\n"); + printf("des_xcbc_encrypt decrypt error\n"); err=1; } #endif @@ -532,16 +529,16 @@ int main(int argc, char *argv[]) /* i=((i+7)/8)*8; */ memcpy(iv3,cbc_iv,sizeof(cbc_iv)); - DES_ede3_cbc_encrypt(cbc_data,cbc_out,16L,&ks,&ks2,&ks3,&iv3, + des_ede3_cbc_encrypt(cbc_data,cbc_out,16L,&ks,&ks2,&ks3,&iv3, DES_ENCRYPT); - DES_ede3_cbc_encrypt(&(cbc_data[16]),&(cbc_out[16]),i-16,&ks,&ks2,&ks3, + des_ede3_cbc_encrypt(&(cbc_data[16]),&(cbc_out[16]),i-16,&ks,&ks2,&ks3, &iv3,DES_ENCRYPT); if (memcmp(cbc_out,cbc3_ok, (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) { int n; - printf("DES_ede3_cbc_encrypt encrypt error\n"); + printf("des_ede3_cbc_encrypt encrypt error\n"); for(n=0 ; n < i ; ++n) printf(" %02x",cbc_out[n]); printf("\n"); @@ -552,12 +549,12 @@ int main(int argc, char *argv[]) } memcpy(iv3,cbc_iv,sizeof(cbc_iv)); - DES_ede3_cbc_encrypt(cbc_out,cbc_in,i,&ks,&ks2,&ks3,&iv3,DES_DECRYPT); + des_ede3_cbc_encrypt(cbc_out,cbc_in,i,&ks,&ks2,&ks3,&iv3,DES_DECRYPT); if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0) { int n; - printf("DES_ede3_cbc_encrypt decrypt error\n"); + printf("des_ede3_cbc_encrypt decrypt error\n"); for(n=0 ; n < i ; ++n) printf(" %02x",cbc_data[n]); printf("\n"); @@ -576,14 +573,14 @@ int main(int argc, char *argv[]) } memset(cbc_out,0,40); memset(cbc_in,0,40); - DES_pcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,&ks, + des_pcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,&ks, &cbc_iv,DES_ENCRYPT); if (memcmp(cbc_out,pcbc_ok,32) != 0) { printf("pcbc_encrypt encrypt error\n"); err=1; } - DES_pcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,&ks,&cbc_iv, + des_pcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,&ks,&cbc_iv, DES_DECRYPT); if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0) { @@ -608,7 +605,7 @@ int main(int argc, char *argv[]) memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv)); for (i=0; i