From 2e63f3b733f383aacd21edbda778c56cf853da81 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Fri, 22 Mar 2002 02:49:46 +0000 Subject: [PATCH] Merge in DES changed from 0.9.7-stable. --- 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