diff --git a/secure/lib/libdes/COPYRIGHT b/secure/lib/libdes/COPYRIGHT index dc789d4fdce9..32f8fb0cf73f 100644 --- a/secure/lib/libdes/COPYRIGHT +++ b/secure/lib/libdes/COPYRIGHT @@ -1,4 +1,4 @@ -Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) All rights reserved. This package is an DES implementation written by Eric Young (eay@mincom.oz.au). diff --git a/secure/lib/libdes/FILES b/secure/lib/libdes/FILES index f8b0c8108179..4c7ea2de7a06 100644 --- a/secure/lib/libdes/FILES +++ b/secure/lib/libdes/FILES @@ -58,7 +58,7 @@ des_locl.h - Internal libdes.a header file. podd.h - Odd parity tables - used in des_set_key(). sk.h - Lookup tables used in des_set_key(). spr.h - What is left of the S tables - used in ecb_encrypt(). -version.h - header file for the external definition of the +des_ver.h - header file for the external definition of the version string. des.doc - SSLeay documentation for the library. diff --git a/secure/lib/libdes/GNUmakefile b/secure/lib/libdes/GNUmakefile index 6372d08ec856..5863b9063fe9 100644 --- a/secure/lib/libdes/GNUmakefile +++ b/secure/lib/libdes/GNUmakefile @@ -21,7 +21,7 @@ routines:= $(destest) distribute:= ARTISTIC COPYRIGHT FILES INSTALL Imakefile README VERSION \ GNUmakefile times vms.com KERBEROS MODES.DES \ des.man des_crypt.man \ - version.h des_locl.h podd.h sk.h spr.h \ + des_ver.h des_locl.h podd.h sk.h spr.h \ des.pl testdes.pl doIP doPC1 doPC2 PC1 PC2 shifts.pl \ des.doc makefile.bc diff --git a/secure/lib/libdes/Makefile.ssl b/secure/lib/libdes/Makefile.ssl index dec44565c466..d0546c6a583d 100644 --- a/secure/lib/libdes/Makefile.ssl +++ b/secure/lib/libdes/Makefile.ssl @@ -14,7 +14,7 @@ MAKEFILE= Makefile.ssl CFLAGS= $(INCLUDES) $(CFLAG) -GENERAL=Makefile +GENERAL=Makefile des.org des_locl.org TEST=destest.c APPS= @@ -25,16 +25,16 @@ LIBSRC= cbc3_enc.c cbc_cksm.c cbc_enc.c cfb64enc.c cfb_enc.c \ qud_cksm.c rand_key.c read_pwd.c rpc_enc.c set_key.c \ str2key.c cfb64ede.c ofb64ede.c supp.c -LIBOBJ= cbc3_enc.o cbc_cksm.o cbc_enc.o cfb64enc.o cfb_enc.o \ - ecb3_enc.o ecb_enc.o ede_enc.o enc_read.o enc_writ.o \ - fcrypt.o ncbc_enc.o ofb64enc.o ofb_enc.o pcbc_enc.o \ - qud_cksm.o rand_key.o read_pwd.o rpc_enc.o set_key.o \ - str2key.o cfb64ede.o ofb64ede.o supp.o +LIBOBJ= set_key.o ecb_enc.o ede_enc.o cbc_enc.o cbc3_enc.o \ + ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o ofb64ede.o \ + enc_read.o enc_writ.o fcrypt.o ncbc_enc.o ofb64enc.o \ + ofb_enc.o str2key.o pcbc_enc.o qud_cksm.o rand_key.o \ + read_pwd.o rpc_enc.o cbc_cksm.o supp.o SRC= $(LIBSRC) EXHEADER= des.h -HEADER= des_locl.h rpc_des.h podd.h sk.h spr.h version.h $(EXHEADER) +HEADER= des_locl.h rpc_des.h podd.h sk.h spr.h des_ver.h $(EXHEADER) ALL= $(GENERAL) $(SRC) $(HEADER) @@ -48,11 +48,14 @@ lib: $(LIBOBJ) $(TOP)/util/ranlib.sh $(LIB) @touch lib +files: + perl $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO + links: /bin/rm -f Makefile - $(TOP)/util/point.sh Makefile.ssl Makefile + $(TOP)/util/point.sh Makefile.ssl Makefile ; /bin/rm -f des.doc - $(TOP)/util/point.sh ../../doc/des.doc . + $(TOP)/util/point.sh ../../doc/des.doc des.doc ; $(TOP)/util/mklink.sh ../../include $(EXHEADER) $(TOP)/util/mklink.sh ../../test $(TEST) $(TOP)/util/mklink.sh ../../apps $(APPS) @@ -78,7 +81,7 @@ depend: $(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC) dclean: - sed -e '/^# DO NOT DELETE THIS LINE/ q' $(MAKEFILE) >Makefile.new + perl -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new mv -f Makefile.new $(MAKEFILE) clean: diff --git a/secure/lib/libdes/Makefile.uni b/secure/lib/libdes/Makefile.uni index 972a84505af2..33f959f00835 100644 --- a/secure/lib/libdes/Makefile.uni +++ b/secure/lib/libdes/Makefile.uni @@ -7,6 +7,9 @@ # MSDOS - we all know what it is :-) # read_pwd.c makes a reasonable guess at what is correct. +# If you are on a DEC Alpha, edit des.h and change the DES_LONG +# define to 'unsigned int'. I have seen this give a %20 speedup. + OPTS0= -DRAND -DTERMIO #-DNOCONST # Version 1.94 has changed the strings_to_key function so that it is @@ -26,7 +29,9 @@ OPTS0= -DRAND -DTERMIO #-DNOCONST # For other machines, experiment with changing the option and run # ./speed to see which is faster. # DO NOT TURN THIS OPTION ON WHEN COMPILING THIS CODE ON A 64 BIT MACHINE -#OPTS2= -DDES_USE_PTR +# 12-Apr-1996 - It appears to be broken and I'm not bothering to fix +# it right now, so don't use this option :-) +#OPTS2= -DDES_PTR OPTS= $(OPTS0) $(OPTS1) $(OPTS2) @@ -51,10 +56,11 @@ OBJS= cbc3_enc.o cbc_cksm.o cbc_enc.o ncbc_enc.o pcbc_enc.o qud_cksm.o \ GENERAL=COPYRIGHT FILES INSTALL Imakefile README VERSION Makefile \ times vms.com KERBEROS MODES.DES GNUmakefile des.man \ DES.pm DES.pod DES.xs Makefile.PL Makefile.uni typemap t \ - des_crypt.man Makefile.ssl des.doc makefile.bc + des_crypt.man Makefile.ssl des.doc makefile.bc des.org \ + des_locl.org DES= des.c TESTING=destest.c speed.c rpw.c -HEADERS=version.h des.h des_locl.h podd.h sk.h spr.h rpc_des.h +HEADERS=des_ver.h des.h des_locl.h podd.h sk.h spr.h rpc_des.h LIBDES= cbc3_enc.c cbc_cksm.c cbc_enc.c ncbc_enc.c pcbc_enc.c qud_cksm.c \ cfb64ede.c cfb64enc.c cfb_enc.c ecb3_enc.c ecb_enc.c ede_enc.c \ enc_read.c enc_writ.c fcrypt.c ofb64ede.c ofb64enc.c ofb_enc.c \ diff --git a/secure/lib/libdes/VERSION b/secure/lib/libdes/VERSION index 5d25ddc17499..864eda3b2114 100644 --- a/secure/lib/libdes/VERSION +++ b/secure/lib/libdes/VERSION @@ -1,3 +1,15 @@ +Version 3.24 20/04/95 + The DES_PTR macro option checked and used by SSLeay configuration + +Version 3.23 11/04/95 + Added DES_LONG. If defined to 'unsigned int' on the DEC Alpha, + it gives a %20 speedup :-) + Fixed the problem with des.pl under perl5. The patches were + sent by Ed Kubaitis (ejk@uiuc.edu). + if fcrypt.c, changed values to handle illegal salt values the way + normal crypt() implementations do. Some programs apparently use + them :-(. The patch was sent by Bjorn Gronvall + Version 3.22 29/11/95 Bug in des(1), an error with the uuencoding stuff when the 'data' is small, thanks to Geoff Keating diff --git a/secure/lib/libdes/cbc3_enc.c b/secure/lib/libdes/cbc3_enc.c index 11aa3ff4d7c7..a7b53ad5aedf 100644 --- a/secure/lib/libdes/cbc3_enc.c +++ b/secure/lib/libdes/cbc3_enc.c @@ -1,5 +1,5 @@ -/* lib/des/cbc3_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/cbc3_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -58,7 +58,7 @@ des_cblock (*iv1); des_cblock (*iv2); int encrypt; { - int off=(length-1)/8; + int off=((int)length-1)/8; long l8=((length+7)/8)*8; des_cblock niv1,niv2; diff --git a/secure/lib/libdes/cbc_cksm.c b/secure/lib/libdes/cbc_cksm.c index 9088c732c6f6..e56c8eb17e6b 100644 --- a/secure/lib/libdes/cbc_cksm.c +++ b/secure/lib/libdes/cbc_cksm.c @@ -1,5 +1,5 @@ -/* lib/des/cbc_cksm.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/cbc_cksm.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -47,16 +47,16 @@ #include "des_locl.h" -unsigned long des_cbc_cksum(input, output, length, schedule, ivec) +DES_LONG des_cbc_cksum(input, output, length, schedule, ivec) des_cblock (*input); des_cblock (*output); long length; des_key_schedule schedule; des_cblock (*ivec); { - register unsigned long tout0,tout1,tin0,tin1; + register DES_LONG tout0,tout1,tin0,tin1; register long l=length; - unsigned long tin[2]; + DES_LONG tin[2]; unsigned char *in,*out,*iv; in=(unsigned char *)input; @@ -77,7 +77,7 @@ des_cblock (*ivec); tin0^=tout0; tin[0]=tin0; tin1^=tout1; tin[1]=tin1; - des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT); /* fix 15/10/91 eay - thanks to keithr@sco.COM */ tout0=tin[0]; tout1=tin[1]; diff --git a/secure/lib/libdes/cbc_enc.c b/secure/lib/libdes/cbc_enc.c index c0cdef896a54..415bcd282b4a 100644 --- a/secure/lib/libdes/cbc_enc.c +++ b/secure/lib/libdes/cbc_enc.c @@ -1,5 +1,5 @@ -/* lib/des/cbc_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/cbc_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -55,11 +55,11 @@ des_key_schedule schedule; des_cblock (*ivec); int encrypt; { - register unsigned long tin0,tin1; - register unsigned long tout0,tout1,xor0,xor1; + register DES_LONG tin0,tin1; + register DES_LONG tout0,tout1,xor0,xor1; register unsigned char *in,*out; register long l=length; - unsigned long tin[2]; + DES_LONG tin[2]; unsigned char *iv; in=(unsigned char *)input; @@ -81,7 +81,7 @@ int encrypt; c2ln(in,tin0,tin1,l); tin0^=tout0; tin[0]=tin0; tin1^=tout1; tin[1]=tin1; - des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT); tout0=tin[0]; l2c(tout0,out); tout1=tin[1]; l2c(tout1,out); } @@ -94,7 +94,7 @@ int encrypt; { c2l(in,tin0); tin[0]=tin0; c2l(in,tin1); tin[1]=tin1; - des_encrypt((unsigned long *)tin,schedule,DES_DECRYPT); + des_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT); tout0=tin[0]^xor0; tout1=tin[1]^xor1; if (l >= 8) diff --git a/secure/lib/libdes/cfb64ede.c b/secure/lib/libdes/cfb64ede.c index 93af8172c1bb..f56c87c407c4 100644 --- a/secure/lib/libdes/cfb64ede.c +++ b/secure/lib/libdes/cfb64ede.c @@ -1,5 +1,5 @@ -/* lib/des/cfb64ede.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/cfb64ede.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -61,9 +61,10 @@ des_cblock (*ivec); int *num; int encrypt; { - register unsigned long v0,v1; - register long l=length,n=*num; - unsigned long ti[2]; + register DES_LONG v0,v1; + register long l=length; + register int n=*num; + DES_LONG ti[2]; unsigned char *iv,c,cc; iv=(unsigned char *)ivec; @@ -80,9 +81,9 @@ int encrypt; ti[0]=v0; ti[1]=v1; - des_encrypt2((unsigned long *)ti,ks1,DES_ENCRYPT); - des_encrypt2((unsigned long *)ti,ks2,DES_DECRYPT); - des_encrypt2((unsigned long *)ti,ks3,DES_ENCRYPT); + des_encrypt2((DES_LONG *)ti,ks1,DES_ENCRYPT); + des_encrypt2((DES_LONG *)ti,ks2,DES_DECRYPT); + des_encrypt2((DES_LONG *)ti,ks3,DES_ENCRYPT); v0=ti[0]; v1=ti[1]; @@ -112,9 +113,9 @@ int encrypt; ti[0]=v0; ti[1]=v1; - des_encrypt2((unsigned long *)ti,ks1,DES_ENCRYPT); - des_encrypt2((unsigned long *)ti,ks2,DES_DECRYPT); - des_encrypt2((unsigned long *)ti,ks3,DES_ENCRYPT); + des_encrypt2((DES_LONG *)ti,ks1,DES_ENCRYPT); + des_encrypt2((DES_LONG *)ti,ks2,DES_DECRYPT); + des_encrypt2((DES_LONG *)ti,ks3,DES_ENCRYPT); v0=ti[0]; v1=ti[1]; diff --git a/secure/lib/libdes/cfb64enc.c b/secure/lib/libdes/cfb64enc.c index 35875f3f647a..60c8511d69b7 100644 --- a/secure/lib/libdes/cfb64enc.c +++ b/secure/lib/libdes/cfb64enc.c @@ -1,5 +1,5 @@ -/* lib/des/cfb64enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/cfb64enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -61,9 +61,10 @@ des_cblock (*ivec); int *num; int encrypt; { - register unsigned long v0,v1; - register long l=length,n=*num; - unsigned long ti[2]; + register DES_LONG v0,v1; + register long l=length; + register int n=*num; + DES_LONG ti[2]; unsigned char *iv,c,cc; iv=(unsigned char *)ivec; @@ -75,7 +76,7 @@ int encrypt; { c2l(iv,v0); ti[0]=v0; c2l(iv,v1); ti[1]=v1; - des_encrypt((unsigned long *)ti, + des_encrypt((DES_LONG *)ti, schedule,DES_ENCRYPT); iv=(unsigned char *)ivec; v0=ti[0]; l2c(v0,iv); @@ -96,7 +97,7 @@ int encrypt; { c2l(iv,v0); ti[0]=v0; c2l(iv,v1); ti[1]=v1; - des_encrypt((unsigned long *)ti, + des_encrypt((DES_LONG *)ti, schedule,DES_ENCRYPT); iv=(unsigned char *)ivec; v0=ti[0]; l2c(v0,iv); diff --git a/secure/lib/libdes/cfb_enc.c b/secure/lib/libdes/cfb_enc.c index 33002d159219..a2875a503612 100644 --- a/secure/lib/libdes/cfb_enc.c +++ b/secure/lib/libdes/cfb_enc.c @@ -1,5 +1,5 @@ -/* lib/des/cfb_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/cfb_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -62,11 +62,11 @@ des_key_schedule schedule; des_cblock (*ivec); int encrypt; { - register unsigned long d0,d1,v0,v1,n=(numbits+7)/8; - register unsigned long mask0,mask1; + register DES_LONG d0,d1,v0,v1,n=(numbits+7)/8; + register DES_LONG mask0,mask1; register unsigned long l=length; register int num=numbits; - unsigned long ti[2]; + DES_LONG ti[2]; unsigned char *iv; if (num > 64) return; @@ -95,7 +95,7 @@ int encrypt; l-=n; ti[0]=v0; ti[1]=v1; - des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)ti,schedule,DES_ENCRYPT); c2ln(in,d0,d1,n); in+=n; d0=(d0^ti[0])&mask0; @@ -127,7 +127,7 @@ int encrypt; l-=n; ti[0]=v0; ti[1]=v1; - des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)ti,schedule,DES_ENCRYPT); c2ln(in,d0,d1,n); in+=n; /* 30-08-94 - eay - changed because l>>32 and diff --git a/secure/lib/libdes/des.c b/secure/lib/libdes/des.c index ca5505bb3b1a..5e349dc64f5f 100644 --- a/secure/lib/libdes/des.c +++ b/secure/lib/libdes/des.c @@ -1,5 +1,5 @@ -/* lib/des/des.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/des.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -55,7 +55,7 @@ #endif #include -#include "version.h" +#include "des_ver.h" #ifdef VMS #include @@ -247,7 +247,7 @@ char **argv; if (vflag) { #ifndef _Windows - fprintf(stderr,"des(1) built with %s\n",DES_version); + fprintf(stderr,"des(1) built with %s\n",libdes_version); #endif EXIT(1); } @@ -255,7 +255,7 @@ char **argv; } #ifndef _Windows - if (vflag) fprintf(stderr,"des(1) built with %s\n",DES_version); + if (vflag) fprintf(stderr,"des(1) built with %s\n",libdes_version); #endif if ( (in != NULL) && (out != NULL) && @@ -826,9 +826,9 @@ FILE *fp; return(tot); } -#define ccc2l(c,l) (l =((unsigned long)(*((c)++)))<<16, \ - l|=((unsigned long)(*((c)++)))<< 8, \ - l|=((unsigned long)(*((c)++)))) +#define ccc2l(c,l) (l =((DES_LONG)(*((c)++)))<<16, \ + l|=((DES_LONG)(*((c)++)))<< 8, \ + l|=((DES_LONG)(*((c)++)))) #define l2ccc(l,c) (*((c)++)=(unsigned char)(((l)>>16)&0xff), \ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ @@ -841,7 +841,7 @@ int num; unsigned char *out; { int j,i,n,tot=0; - unsigned long l; + DES_LONG l; register unsigned char *p; p=out; @@ -875,8 +875,8 @@ unsigned char *out; { int j,i,k; unsigned int n=0,space=0; - unsigned long l; - unsigned long w,x,y,z; + DES_LONG l; + DES_LONG w,x,y,z; unsigned int blank=(unsigned int)'\n'-' '; for (j=0; j 4); + # The following 8 arrays are used in des_set_key @skb0=( # for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 @@ -375,8 +383,8 @@ sub main'des_set_key $skb6[ ($d>>15)&0x3f ]| $skb7[(($d>>21)&0x0f)|(($d>>22)&0x30)]; push(@ks,(($t<<16)|($s&0x0000ffff))&0xffffffff); - $s= ($s>>16)|($t&0xffff0000) ; - push(@ks,(($s<<4)|($s>>28))&0xffffffff); + $s= (($s>>16)&0x0000ffff)|($t&0xffff0000) ; + push(@ks,(($s<<4)|(($s>>28)&0xf))&0xffffffff); } @ks; } @@ -390,23 +398,23 @@ sub doPC1 $b^=($t<<4); $a^=$t; # do $a first $t=(($a<<18)^$a)&0xcccc0000; - $a=$a^$t^($t>>18); + $a=$a^$t^(($t>>18)&0x00003fff); $t=(($a<<17)^$a)&0xaaaa0000; - $a=$a^$t^($t>>17); + $a=$a^$t^(($t>>17)&0x00007fff); $t=(($a<< 8)^$a)&0x00ff0000; - $a=$a^$t^($t>> 8); + $a=$a^$t^(($t>> 8)&0x00ffffff); $t=(($a<<17)^$a)&0xaaaa0000; - $a=$a^$t^($t>>17); + $a=$a^$t^(($t>>17)&0x00007fff); # now do $b $t=(($b<<24)^$b)&0xff000000; - $b=$b^$t^($t>>24); + $b=$b^$t^(($t>>24)&0x000000ff); $t=(($b<< 8)^$b)&0x00ff0000; - $b=$b^$t^($t>> 8); + $b=$b^$t^(($t>> 8)&0x00ffffff); $t=(($b<<14)^$b)&0x33330000; - $b=$b^$t^($t>>14); + $b=$b^$t^(($t>>14)&0x0003ffff); $b=(($b&0x00aa00aa)<<7)|(($b&0x55005500)>>7)|($b&0xaa55aa55); - $b=($b>>8)|(($a&0xf0000000)>>4); + $b=(($b>>8)&0x00ffffff)|((($a&0xf0000000)>>4)&0x0fffffff); $a&=0x0fffffff; } @@ -472,10 +480,12 @@ sub main'des_ecb_encrypt { for ($i=0; $i<32; $i+=4) { - $t=(($r<<1)|($r>>31))&0xffffffff; + $t=((($r&0x7fffffff)<<1)|(($r>>31)&0x00000001)); $u=$t^$ks[$i ]; $t=$t^$ks[$i+1]; - $t=(($t>>4)|($t<<28))&0xffffffff; + $t2=(($t&0x0000000f)<<28); + + $t=((($t>>4)&0x0fffffff)|(($t&0x0000000f)<<28)); $l^= $SP1[ $t &0x3f]| $SP3[($t>> 8)&0x3f]| $SP5[($t>>16)&0x3f]| @@ -485,10 +495,10 @@ sub main'des_ecb_encrypt $SP4[($u>>16)&0x3f]| $SP6[($u>>24)&0x3f]; - $t=(($l<<1)|($l>>31))&0xffffffff; + $t=(($l<<1)|(($l>>31)&0x1))&0xffffffff; $u=$t^$ks[$i+2]; $t=$t^$ks[$i+3]; - $t=(($t>>4)|($t<<28))&0xffffffff; + $t=((($t>>4)&0x0fffffff)|($t<<28))&0xffffffff; $r^= $SP1[ $t &0x3f]| $SP3[($t>> 8)&0x3f]| $SP5[($t>>16)&0x3f]| @@ -503,10 +513,10 @@ sub main'des_ecb_encrypt { for ($i=30; $i>0; $i-=4) { - $t=(($r<<1)|($r>>31))&0xffffffff; + $t=(($r<<1)|(($r>>31)&0x1))&0xffffffff; $u=$t^$ks[$i ]; $t=$t^$ks[$i+1]; - $t=(($t>>4)|($t<<28))&0xffffffff; + $t=((($t>>4)&0x0fffffff)|($t<<28))&0xffffffff; $l^= $SP1[ $t &0x3f]| $SP3[($t>> 8)&0x3f]| $SP5[($t>>16)&0x3f]| @@ -516,10 +526,10 @@ sub main'des_ecb_encrypt $SP4[($u>>16)&0x3f]| $SP6[($u>>24)&0x3f]; - $t=(($l<<1)|($l>>31))&0xffffffff; + $t=(($l<<1)|(($l>>31)&0x1))&0xffffffff; $u=$t^$ks[$i-2]; $t=$t^$ks[$i-1]; - $t=(($t>>4)|($t<<28))&0xffffffff; + $t=((($t>>4)&0x0fffffff)|($t<<28))&0xffffffff; $r^= $SP1[ $t &0x3f]| $SP3[($t>> 8)&0x3f]| $SP5[($t>>16)&0x3f]| @@ -531,6 +541,12 @@ sub main'des_ecb_encrypt } } &doFP(*l,*r); - pack("C8",$l&0xff,$l>>8,$l>>16,$l>>24, - $r&0xff,$r>>8,$r>>16,$r>>24); + pack("C8",$l&0xff, + ($l>> 8)&0x00ffffff, + ($l>>16)&0x0000ffff, + ($l>>24)&0x000000ff, + $r&0xff, + ($r>> 8)&0x00ffffff, + ($r>>16)&0x0000ffff, + ($r>>24)&0x000000ff); } diff --git a/secure/lib/libdes/des_locl.h b/secure/lib/libdes/des_locl.h index 80a4ccdcf003..87a2b4a1f081 100644 --- a/secure/lib/libdes/des_locl.h +++ b/secure/lib/libdes/des_locl.h @@ -1,5 +1,5 @@ /* lib/des/des_locl.h */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -44,9 +44,23 @@ * copied and put under another distribution licence * [including the GNU Public Licence.] */ +/* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + * + * Always modify des_locl.org since des_locl.h is automatically generated from + * it during SSLeay configuration. + * + * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + */ #ifndef HEADER_DES_LOCL_H #define HEADER_DES_LOCL_H + +#if defined(WIN32) || defined(WIN16) +#ifndef MSDOS +#define MSDOS +#endif +#endif + #include #include #ifndef MSDOS @@ -56,12 +70,13 @@ /* the following is tweaked from a config script, that is why it is a * protected undef/define */ -#ifndef DES_USE_PTR -#undef DES_USE_PTR +#ifndef DES_PTR +#undef DES_PTR #endif #ifdef MSDOS /* Visual C++ 2.1 (Windows NT/95) */ #include +#include #include #include #ifndef RAND @@ -84,7 +99,6 @@ #ifdef MSDOS #define getpid() 2 -extern int errno; #define RAND #undef NOPROTO #endif @@ -109,24 +123,24 @@ extern int errno; #define MAXWRITE (1024*16) #define BSIZE (MAXWRITE+4) -#define c2l(c,l) (l =((unsigned long)(*((c)++))) , \ - l|=((unsigned long)(*((c)++)))<< 8L, \ - l|=((unsigned long)(*((c)++)))<<16L, \ - l|=((unsigned long)(*((c)++)))<<24L) +#define c2l(c,l) (l =((DES_LONG)(*((c)++))) , \ + l|=((DES_LONG)(*((c)++)))<< 8L, \ + l|=((DES_LONG)(*((c)++)))<<16L, \ + l|=((DES_LONG)(*((c)++)))<<24L) /* NOTE - c is not incremented as per c2l */ #define c2ln(c,l1,l2,n) { \ c+=n; \ l1=l2=0; \ switch (n) { \ - case 8: l2 =((unsigned long)(*(--(c))))<<24L; \ - case 7: l2|=((unsigned long)(*(--(c))))<<16L; \ - case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \ - case 5: l2|=((unsigned long)(*(--(c)))); \ - case 4: l1 =((unsigned long)(*(--(c))))<<24L; \ - case 3: l1|=((unsigned long)(*(--(c))))<<16L; \ - case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \ - case 1: l1|=((unsigned long)(*(--(c)))); \ + case 8: l2 =((DES_LONG)(*(--(c))))<<24L; \ + case 7: l2|=((DES_LONG)(*(--(c))))<<16L; \ + case 6: l2|=((DES_LONG)(*(--(c))))<< 8L; \ + case 5: l2|=((DES_LONG)(*(--(c)))); \ + case 4: l1 =((DES_LONG)(*(--(c))))<<24L; \ + case 3: l1|=((DES_LONG)(*(--(c))))<<16L; \ + case 2: l1|=((DES_LONG)(*(--(c))))<< 8L; \ + case 1: l1|=((DES_LONG)(*(--(c)))); \ } \ } @@ -139,10 +153,10 @@ extern int errno; * when faced with machines with 8 byte longs. */ #define HDRSIZE 4 -#define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24L, \ - l|=((unsigned long)(*((c)++)))<<16L, \ - l|=((unsigned long)(*((c)++)))<< 8L, \ - l|=((unsigned long)(*((c)++)))) +#define n2l(c,l) (l =((DES_LONG)(*((c)++)))<<24L, \ + l|=((DES_LONG)(*((c)++)))<<16L, \ + l|=((DES_LONG)(*((c)++)))<< 8L, \ + l|=((DES_LONG)(*((c)++)))) #define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24L)&0xff), \ *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ @@ -164,26 +178,35 @@ extern int errno; } \ } +#if defined(WIN32) +#define ROTATE(a,n) (_lrotr(a,n)) +#else +#define ROTATE(a,n) (((a)>>(n))+((a)<<(32-(n)))) +#endif + /* The changes to this macro may help or hinder, depending on the * compiler and the achitecture. gcc2 always seems to do well :-). * Inspired by Dana How - * DO NOT use the alternative version on machines with 8 byte longs. */ -#ifdef DES_USR_PTR + * DO NOT use the alternative version on machines with 8 byte longs. + * It does not seem to work on the Alpha, even when DES_LONG is 4 + * bytes, probably an issue of accessing non-word aligned objects :-( */ +#ifdef DES_PTR + #define D_ENCRYPT(L,R,S) { \ u=((R^s[S ])<<2); \ t= R^s[S+1]; \ - t=((t>>2)+(t<<30)); \ - L^= \ - *(unsigned long *)(des_SP+0x0100+((t )&0xfc))+ \ - *(unsigned long *)(des_SP+0x0300+((t>> 8)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0500+((t>>16)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0700+((t>>24)&0xfc))+ \ - *(unsigned long *)(des_SP+ ((u )&0xfc))+ \ - *(unsigned long *)(des_SP+0x0200+((u>> 8)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0400+((u>>16)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0600+((u>>24)&0xfc)); } + t=ROTATE(t,2); \ + L^= (\ + *(DES_LONG *)((unsigned char *)des_SP+0x100+((t )&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x300+((t>> 8)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x500+((t>>16)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x700+((t>>24)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP +((u )&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x200+((u>> 8)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x400+((u>>16)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x600+((u>>24)&0xfc))); } #else /* original version */ -#ifdef MSDOS +#ifdef undef #define D_ENCRYPT(L,R,S) \ U.l=R^s[S+1]; \ T.s[0]=((U.s[0]>>4)|(U.s[1]<<12))&0x3f3f; \ @@ -201,7 +224,7 @@ extern int errno; #define D_ENCRYPT(Q,R,S) {\ u=(R^s[S ]); \ t=R^s[S+1]; \ - t=((t>>4L)+(t<<28L)); \ + t=ROTATE(t,4); \ Q^= des_SPtrans[1][(t )&0x3f]| \ des_SPtrans[3][(t>> 8L)&0x3f]| \ des_SPtrans[5][(t>>16L)&0x3f]| \ @@ -256,7 +279,7 @@ extern int errno; #define IP(l,r) \ { \ - register unsigned long tt; \ + register DES_LONG tt; \ PERM_OP(r,l,tt, 4,0x0f0f0f0fL); \ PERM_OP(l,r,tt,16,0x0000ffffL); \ PERM_OP(r,l,tt, 2,0x33333333L); \ @@ -266,7 +289,7 @@ extern int errno; #define FP(l,r) \ { \ - register unsigned long tt; \ + register DES_LONG tt; \ PERM_OP(l,r,tt, 1,0x55555555L); \ PERM_OP(r,l,tt, 8,0x00ff00ffL); \ PERM_OP(l,r,tt, 2,0x33333333L); \ diff --git a/secure/lib/libdes/des_ver.h b/secure/lib/libdes/des_ver.h new file mode 100644 index 000000000000..b895af89edac --- /dev/null +++ b/secure/lib/libdes/des_ver.h @@ -0,0 +1,49 @@ +/* crypto/des/des_ver.h */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) + * All rights reserved. + * + * This file is part of an SSL implementation written + * by Eric Young (eay@mincom.oz.au). + * The implementation was written so as to conform with Netscapes SSL + * specification. This library and applications are + * FREE FOR COMMERCIAL AND NON-COMMERCIAL USE + * as long as the following conditions are aheared to. + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. If this code is used in a product, + * Eric Young should be given attribution as the author of the parts used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Eric Young (eay@mincom.oz.au) + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + +extern char *DES_version; /* SSLeay version string */ +extern char *libdes_version; /* old libdes version string */ diff --git a/secure/lib/libdes/destest.c b/secure/lib/libdes/destest.c index fec39905087d..9b04a5de3cec 100644 --- a/secure/lib/libdes/destest.c +++ b/secure/lib/libdes/destest.c @@ -1,5 +1,5 @@ -/* lib/des/destest.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/destest.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -45,6 +45,12 @@ * [including the GNU Public Licence.] */ +#if defined(WIN32) || defined(WIN16) || defined(WINDOWS) +#ifndef MSDOS +#define MSDOS +#endif +#endif + #include #include #ifndef MSDOS @@ -261,7 +267,7 @@ static unsigned char ofb_cipher[24]= 0x3d,0x6d,0x5b,0xe3,0x25,0x5a,0xf8,0xc3 }; -unsigned long cbc_cksum_ret=0xB462FEF7L; +DES_LONG cbc_cksum_ret=0xB462FEF7L; unsigned char cbc_cksum_data[8]={0x1D,0x26,0x93,0x97,0xf7,0xfe,0x62,0xb4}; #ifndef NOPROTO @@ -285,16 +291,16 @@ char *argv[]; des_key_schedule ks,ks2,ks3; unsigned char cbc_in[40]; unsigned char cbc_out[40]; - unsigned long cs; + DES_LONG cs; unsigned char qret[4][4],cret[8]; - unsigned long lqret[4]; + DES_LONG lqret[4]; int num; char *str; printf("Doing ecb\n"); for (i=0; i0; i-=4) + for (i=30; i>0; i-=8) { D_ENCRYPT(l,r,i-0); /* 16 */ D_ENCRYPT(r,l,i-2); /* 15 */ + D_ENCRYPT(l,r,i-4); /* 14 */ + D_ENCRYPT(r,l,i-6); /* 13 */ } } l=(l>>1)|(l<<31); @@ -138,23 +160,23 @@ int encrypt; } void des_encrypt2(data, ks, encrypt) -unsigned long *data; +DES_LONG *data; des_key_schedule ks; int encrypt; { - register unsigned long l,r,t,u; -#ifdef DES_USE_PTR + register DES_LONG l,r,t,u; +#ifdef DES_PTR register unsigned char *des_SP=(unsigned char *)des_SPtrans; #endif -#ifdef MSDOS +#ifdef undef union fudge { - unsigned long l; + DES_LONG l; unsigned short s[2]; unsigned char c[4]; } U,T; #endif register int i; - register unsigned long *s; + register DES_LONG *s; u=data[0]; r=data[1]; @@ -172,23 +194,27 @@ int encrypt; l&=0xffffffffL; r&=0xffffffffL; - s=(unsigned long *)ks; + s=(DES_LONG *)ks; /* I don't know if it is worth the effort of loop unrolling the * inner loop */ if (encrypt) { - for (i=0; i<32; i+=4) + for (i=0; i<32; i+=8) { D_ENCRYPT(l,r,i+0); /* 1 */ D_ENCRYPT(r,l,i+2); /* 2 */ + D_ENCRYPT(l,r,i+4); /* 3 */ + D_ENCRYPT(r,l,i+6); /* 4 */ } } else { - for (i=30; i>0; i-=4) + for (i=30; i>0; i-=8) { D_ENCRYPT(l,r,i-0); /* 16 */ D_ENCRYPT(r,l,i-2); /* 15 */ + D_ENCRYPT(l,r,i-4); /* 14 */ + D_ENCRYPT(r,l,i-6); /* 13 */ } } l=(l>>1)|(l<<31); diff --git a/secure/lib/libdes/ede_enc.c b/secure/lib/libdes/ede_enc.c index 5084e9494785..c8a9e80937bc 100644 --- a/secure/lib/libdes/ede_enc.c +++ b/secure/lib/libdes/ede_enc.c @@ -1,5 +1,5 @@ -/* lib/des/ede_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/ede_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -57,11 +57,11 @@ des_key_schedule ks3; des_cblock (*ivec); int encrypt; { - register unsigned long tin0,tin1; - register unsigned long tout0,tout1,xor0,xor1; + register DES_LONG tin0,tin1; + register DES_LONG tout0,tout1,xor0,xor1; register unsigned char *in,*out; register long l=length; - unsigned long tin[2]; + DES_LONG tin[2]; unsigned char *iv; in=(unsigned char *)input; @@ -88,9 +88,9 @@ int encrypt; tin[0]=tin0; tin[1]=tin1; - des_encrypt2((unsigned long *)tin,ks1,DES_ENCRYPT); - des_encrypt2((unsigned long *)tin,ks2,DES_DECRYPT); - des_encrypt2((unsigned long *)tin,ks3,DES_ENCRYPT); + des_encrypt2((DES_LONG *)tin,ks1,DES_ENCRYPT); + des_encrypt2((DES_LONG *)tin,ks2,DES_DECRYPT); + des_encrypt2((DES_LONG *)tin,ks3,DES_ENCRYPT); tout0=tin[0]; tout1=tin[1]; @@ -109,7 +109,7 @@ int encrypt; c2l(iv,xor1); for (; l>0; l-=8) { - register unsigned long t0,t1; + register DES_LONG t0,t1; c2l(in,tin0); c2l(in,tin1); @@ -120,9 +120,9 @@ int encrypt; tin[0]=tin0; tin[1]=tin1; - des_encrypt2((unsigned long *)tin,ks3,DES_DECRYPT); - des_encrypt2((unsigned long *)tin,ks2,DES_ENCRYPT); - des_encrypt2((unsigned long *)tin,ks1,DES_DECRYPT); + des_encrypt2((DES_LONG *)tin,ks3,DES_DECRYPT); + des_encrypt2((DES_LONG *)tin,ks2,DES_ENCRYPT); + des_encrypt2((DES_LONG *)tin,ks1,DES_DECRYPT); tout0=tin[0]; tout1=tin[1]; diff --git a/secure/lib/libdes/enc_read.c b/secure/lib/libdes/enc_read.c index 11a6c5a82544..00989d292852 100644 --- a/secure/lib/libdes/enc_read.c +++ b/secure/lib/libdes/enc_read.c @@ -1,5 +1,5 @@ -/* lib/des/enc_read.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/enc_read.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -50,7 +50,7 @@ #include "des_locl.h" /* This has some uglies in it but it works - even over sockets. */ -extern int errno; +/*extern int errno;*/ int des_rw_mode=DES_PCBC_MODE; int des_enc_read(fd, buf, len, sched, iv) @@ -62,17 +62,33 @@ des_cblock (*iv); { /* data to be unencrypted */ int net_num=0; - unsigned char net[BSIZE]; + static unsigned char *net=NULL; /* extra unencrypted data * for when a block of 100 comes in but is des_read one byte at * a time. */ - static char unnet[BSIZE]; + static char *unnet=NULL; static int unnet_start=0; static int unnet_left=0; + static char *tmpbuf=NULL; int i; long num=0,rnum; unsigned char *p; + if (tmpbuf == NULL) + { + tmpbuf=(char *)malloc(BSIZE); + if (tmpbuf == NULL) return(-1); + } + if (net == NULL) + { + net=(unsigned char *)malloc(BSIZE); + if (net == NULL) return(-1); + } + if (unnet == NULL) + { + unnet=(char *)malloc(BSIZE); + if (unnet == NULL) return(-1); + } /* left over data from last decrypt */ if (unnet_left != 0) { @@ -102,7 +118,6 @@ des_cblock (*iv); if (len > MAXWRITE) len=MAXWRITE; /* first - get the length */ - net_num=0; while (net_num < HDRSIZE) { i=read(fd,&(net[net_num]),(unsigned int)HDRSIZE-net_num); @@ -113,7 +128,7 @@ des_cblock (*iv); /* we now have at net_num bytes in net */ p=net; - num=0; + /* num=0; */ n2l(p,num); /* num should be rounded up to the next group of eight * we make sure that we have read a multiple of 8 bytes from the net. @@ -135,14 +150,14 @@ des_cblock (*iv); if (len < num) { if (des_rw_mode & DES_PCBC_MODE) - pcbc_encrypt((des_cblock *)net,(des_cblock *)unnet, + des_pcbc_encrypt((des_cblock *)net,(des_cblock *)unnet, num,sched,iv,DES_DECRYPT); else - cbc_encrypt((des_cblock *)net,(des_cblock *)unnet, + des_cbc_encrypt((des_cblock *)net,(des_cblock *)unnet, num,sched,iv,DES_DECRYPT); memcpy(buf,unnet,(unsigned int)len); unnet_start=len; - unnet_left=num-len; + unnet_left=(int)num-len; /* The following line is done because we return num * as the number of bytes read. */ @@ -157,14 +172,13 @@ des_cblock (*iv); * FIXED - Should be ok now 18-9-90 - eay */ if (len < rnum) { - char tmpbuf[BSIZE]; if (des_rw_mode & DES_PCBC_MODE) - pcbc_encrypt((des_cblock *)net, + des_pcbc_encrypt((des_cblock *)net, (des_cblock *)tmpbuf, num,sched,iv,DES_DECRYPT); else - cbc_encrypt((des_cblock *)net, + des_cbc_encrypt((des_cblock *)net, (des_cblock *)tmpbuf, num,sched,iv,DES_DECRYPT); @@ -175,15 +189,15 @@ des_cblock (*iv); else { if (des_rw_mode & DES_PCBC_MODE) - pcbc_encrypt((des_cblock *)net, + des_pcbc_encrypt((des_cblock *)net, (des_cblock *)buf,num,sched,iv, DES_DECRYPT); else - cbc_encrypt((des_cblock *)net, + des_cbc_encrypt((des_cblock *)net, (des_cblock *)buf,num,sched,iv, DES_DECRYPT); } } - return(num); + return((int)num); } diff --git a/secure/lib/libdes/enc_writ.c b/secure/lib/libdes/enc_writ.c index e0d50751f7ed..0b7a50be9d23 100644 --- a/secure/lib/libdes/enc_writ.c +++ b/secure/lib/libdes/enc_writ.c @@ -1,5 +1,5 @@ -/* lib/des/enc_writ.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/enc_writ.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -65,11 +65,16 @@ des_cblock (*iv); long rnum; int i,j,k,outnum; - char outbuf[BSIZE+HDRSIZE]; + char *outbuf=NULL; char shortbuf[8]; char *p; static int start=1; + if (outbuf == NULL) + { + outbuf=(char *)malloc(BSIZE+HDRSIZE); + if (outbuf == NULL) return(-1); + } /* If we are sending less than 8 bytes, the same char will look * the same if we don't pad it out with random bytes */ if (start) @@ -114,14 +119,16 @@ des_cblock (*iv); } if (des_rw_mode & DES_PCBC_MODE) - pcbc_encrypt((des_cblock *)p,(des_cblock *)&(outbuf[HDRSIZE]), + des_pcbc_encrypt((des_cblock *)p, + (des_cblock *)&(outbuf[HDRSIZE]), (long)((len<8)?8:len),sched,iv,DES_ENCRYPT); else - cbc_encrypt((des_cblock *)p,(des_cblock *)&(outbuf[HDRSIZE]), + des_cbc_encrypt((des_cblock *)p, + (des_cblock *)&(outbuf[HDRSIZE]), (long)((len<8)?8:len),sched,iv,DES_ENCRYPT); /* output */ - outnum=rnum+HDRSIZE; + outnum=(int)rnum+HDRSIZE; for (j=0; j> 8)&0xff), \ *((c)++)=(unsigned char)(((l)>>16)&0xff), \ *((c)++)=(unsigned char)(((l)>>24)&0xff)) -static const unsigned long SPtrans[8][64]={ +static const DES_LONG des_SPtrans[8][64]={ { /* nibble 0 */ 0x00820200L, 0x00020000L, 0x80800000L, 0x80820200L, @@ -233,7 +221,7 @@ static const unsigned long SPtrans[8][64]={ 0x00208000L, 0x00008020L, 0x08008020L, 0x08200000L, 0x00000020L, 0x08208000L, 0x00208020L, 0x00000000L, 0x08000000L, 0x08200020L, 0x00008000L, 0x00208020L}}; -static const unsigned long skb[8][64]={ +static const DES_LONG skb[8][64]={ { /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ 0x00000000L,0x00000010L,0x20000000L,0x20000010L, @@ -388,27 +376,37 @@ static const unsigned long skb[8][64]={ #define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\ (a)=(a)^(t)^(t>>(16-(n))))\ -static const int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; +#endif #ifndef NOPROTO -static int body(unsigned long *out0, unsigned long *out1, - des_key_schedule ks, unsigned long Eswap0, unsigned long Eswap1); -static int des_set_key(des_cblock (*key), des_key_schedule schedule); -#else -static int body(); -static int des_set_key(); +static int body(DES_LONG *out0, DES_LONG *out1, + des_key_schedule ks, DES_LONG Eswap0, DES_LONG Eswap1); +#ifndef HEADER_DES_LOCL_H +static int fcrypt_set_key(des_cblock (*key), des_key_schedule schedule); #endif -static int des_set_key(key, schedule) +#else + +static int body(); +#ifndef HEADER_DES_LOCL_H +static int fcrypt_set_key(); +#endif +#endif + +#ifdef HEADER_DES_LOCL_H +#define fcrypt_set_key(a,b) des_set_key(a,b) +#else +static int fcrypt_set_key(key, schedule) des_cblock (*key); des_key_schedule schedule; { - register unsigned long c,d,t,s; + static const int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; + register DES_LONG c,d,t,s; register unsigned char *in; - register unsigned long *k; + register DES_LONG *k; register int i; - k=(unsigned long *)schedule; + k=(DES_LONG *)schedule; in=(unsigned char *)key; c2l(in,c); @@ -456,6 +454,7 @@ des_key_schedule schedule; } return(0); } +#endif /****************************************************************** * modified stuff for crypt. @@ -466,8 +465,8 @@ des_key_schedule schedule; * Inspired by Dana How * DO NOT use the alternative version on machines with 8 byte longs. */ -#ifdef DES_USE_PTR -#define D_ENCRYPT(L,R,S) \ +#ifdef DES_PTR +#define CR_ENCRYPT(L,R,S) \ t=(R^(R>>16)); \ u=(t&E0); \ t=(t&E1); \ @@ -475,39 +474,43 @@ des_key_schedule schedule; t=(t^(t<<16))^R^s[S+1]; \ t=(t>>2)|(t<<30); \ L^= \ - *(unsigned long *)(des_SP+0x0100+((t )&0xfc))+ \ - *(unsigned long *)(des_SP+0x0300+((t>> 8)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0500+((t>>16)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0700+((t>>24)&0xfc))+ \ - *(unsigned long *)(des_SP+ ((u )&0xfc))+ \ - *(unsigned long *)(des_SP+0x0200+((u>> 8)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0400+((u>>16)&0xfc))+ \ - *(unsigned long *)(des_SP+0x0600+((u>>24)&0xfc)); + *(DES_LONG *)((unsigned char *)des_SP+0x0100+((t )&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x0300+((t>> 8)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x0500+((t>>16)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x0700+((t>>24)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+ ((u )&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x0200+((u>> 8)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x0400+((u>>16)&0xfc))+ \ + *(DES_LONG *)((unsigned char *)des_SP+0x0600+((u>>24)&0xfc)); #else /* original version */ -#define D_ENCRYPT(L,R,S) \ +#define CR_ENCRYPT(L,R,S) \ t=(R^(R>>16)); \ u=(t&E0); \ t=(t&E1); \ u=(u^(u<<16))^R^s[S ]; \ t=(t^(t<<16))^R^s[S+1]; \ t=(t>>4)|(t<<28); \ - L^= SPtrans[1][(t )&0x3f]| \ - SPtrans[3][(t>> 8)&0x3f]| \ - SPtrans[5][(t>>16)&0x3f]| \ - SPtrans[7][(t>>24)&0x3f]| \ - SPtrans[0][(u )&0x3f]| \ - SPtrans[2][(u>> 8)&0x3f]| \ - SPtrans[4][(u>>16)&0x3f]| \ - SPtrans[6][(u>>24)&0x3f]; + L^= des_SPtrans[1][(t )&0x3f]| \ + des_SPtrans[3][(t>> 8)&0x3f]| \ + des_SPtrans[5][(t>>16)&0x3f]| \ + des_SPtrans[7][(t>>24)&0x3f]| \ + des_SPtrans[0][(u )&0x3f]| \ + des_SPtrans[2][(u>> 8)&0x3f]| \ + des_SPtrans[4][(u>>16)&0x3f]| \ + des_SPtrans[6][(u>>24)&0x3f]; #endif +/* Added more values to handle illegal salt values the way normal + * crypt() implementations do. The patch was sent by + * Bjorn Gronvall + */ static unsigned const char con_salt[128]={ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, +0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9, +0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1, +0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9, +0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1, +0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9, +0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,0x00,0x01, 0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, 0x0A,0x0B,0x05,0x06,0x07,0x08,0x09,0x0A, 0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12, @@ -517,7 +520,7 @@ static unsigned const char con_salt[128]={ 0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C, 0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34, 0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C, -0x3D,0x3E,0x3F,0x00,0x00,0x00,0x00,0x00, +0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44, }; static unsigned const char cov_2char[64]={ @@ -535,7 +538,7 @@ static unsigned const char cov_2char[64]={ #ifdef PERL5 char *des_crypt(char *buf,char *salt); #else -char *crypt(char *buf,char *salt); +char *crypt(const char *buf,const char *salt); #endif #else #ifdef PERL5 @@ -550,12 +553,12 @@ char *des_crypt(buf,salt) #else char *crypt(buf,salt) #endif -char *buf; -char *salt; +const char *buf; +const char *salt; { unsigned int i,j,x,y; - unsigned long Eswap0=0,Eswap1=0; - unsigned long out[2],ll; + DES_LONG Eswap0,Eswap1; + DES_LONG out[2],ll; des_cblock key; des_key_schedule ks; static unsigned char buff[20]; @@ -585,7 +588,7 @@ char *salt; for (; i<8; i++) key[i]=0; - des_set_key((des_cblock *)(key),ks); + fcrypt_set_key((des_cblock *)(key),ks); body(&(out[0]),&(out[1]),ks,Eswap0,Eswap1); ll=out[0]; l2c(ll,b); @@ -614,24 +617,24 @@ char *salt; } static int body(out0, out1, ks, Eswap0, Eswap1) -unsigned long *out0; -unsigned long *out1; +DES_LONG *out0; +DES_LONG *out1; des_key_schedule ks; -unsigned long Eswap0; -unsigned long Eswap1; +DES_LONG Eswap0; +DES_LONG Eswap1; { - register unsigned long l,r,t,u; -#ifdef DES_USE_PTR - register unsigned char *des_SP=(unsigned char *)SPtrans; + register DES_LONG l,r,t,u; +#ifdef DES_PTR + register unsigned char *des_SP=(unsigned char *)des_SPtrans; #endif - register unsigned long *s; + register DES_LONG *s; register int i,j; - register unsigned long E0,E1; + register DES_LONG E0,E1; l=0; r=0; - s=(unsigned long *)ks; + s=(DES_LONG *)ks; E0=Eswap0; E1=Eswap1; @@ -639,8 +642,8 @@ unsigned long Eswap1; { for (i=0; i<(ITERATIONS*2); i+=4) { - D_ENCRYPT(l,r, i); /* 1 */ - D_ENCRYPT(r,l, i+2); /* 2 */ + CR_ENCRYPT(l,r, i); /* 1 */ + CR_ENCRYPT(r,l, i+2); /* 2 */ } t=l; l=r; diff --git a/secure/lib/libdes/ncbc_enc.c b/secure/lib/libdes/ncbc_enc.c index d307ae407a86..4595dcb89151 100644 --- a/secure/lib/libdes/ncbc_enc.c +++ b/secure/lib/libdes/ncbc_enc.c @@ -1,5 +1,5 @@ -/* lib/des/ncbc_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/ncbc_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -55,11 +55,11 @@ des_key_schedule schedule; des_cblock (*ivec); int encrypt; { - register unsigned long tin0,tin1; - register unsigned long tout0,tout1,xor0,xor1; + register DES_LONG tin0,tin1; + register DES_LONG tout0,tout1,xor0,xor1; register unsigned char *in,*out; register long l=length; - unsigned long tin[2]; + DES_LONG tin[2]; unsigned char *iv; in=(unsigned char *)input; @@ -81,7 +81,7 @@ int encrypt; c2ln(in,tin0,tin1,l); tin0^=tout0; tin[0]=tin0; tin1^=tout1; tin[1]=tin1; - des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT); tout0=tin[0]; l2c(tout0,out); tout1=tin[1]; l2c(tout1,out); } @@ -97,7 +97,7 @@ int encrypt; { c2l(in,tin0); tin[0]=tin0; c2l(in,tin1); tin[1]=tin1; - des_encrypt((unsigned long *)tin,schedule,DES_DECRYPT); + des_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT); tout0=tin[0]^xor0; tout1=tin[1]^xor1; if (l >= 8) diff --git a/secure/lib/libdes/ofb64ede.c b/secure/lib/libdes/ofb64ede.c index 3868e76ee1f1..8923b5fdfae4 100644 --- a/secure/lib/libdes/ofb64ede.c +++ b/secure/lib/libdes/ofb64ede.c @@ -1,5 +1,5 @@ -/* lib/des/ofb64ede.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/ofb64ede.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -59,12 +59,12 @@ des_key_schedule k1,k2,k3; des_cblock (*ivec); int *num; { - register unsigned long v0,v1; + register DES_LONG v0,v1; register int n=*num; register long l=length; des_cblock d; register char *dp; - unsigned long ti[2]; + DES_LONG ti[2]; unsigned char *iv; int save=0; @@ -84,9 +84,9 @@ int *num; ti[0]=v0; ti[1]=v1; - des_encrypt2((unsigned long *)ti,k1,DES_ENCRYPT); - des_encrypt2((unsigned long *)ti,k2,DES_DECRYPT); - des_encrypt2((unsigned long *)ti,k3,DES_ENCRYPT); + des_encrypt2((DES_LONG *)ti,k1,DES_ENCRYPT); + des_encrypt2((DES_LONG *)ti,k2,DES_DECRYPT); + des_encrypt2((DES_LONG *)ti,k3,DES_ENCRYPT); v0=ti[0]; v1=ti[1]; diff --git a/secure/lib/libdes/ofb64enc.c b/secure/lib/libdes/ofb64enc.c index bc8dd8c82716..bb4937aeaf4d 100644 --- a/secure/lib/libdes/ofb64enc.c +++ b/secure/lib/libdes/ofb64enc.c @@ -1,5 +1,5 @@ -/* lib/des/ofb64enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/ofb64enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -59,12 +59,12 @@ des_key_schedule schedule; des_cblock (*ivec); int *num; { - register unsigned long v0,v1,t; + register DES_LONG v0,v1,t; register int n=*num; register long l=length; des_cblock d; register char *dp; - unsigned long ti[2]; + DES_LONG ti[2]; unsigned char *iv; int save=0; @@ -80,7 +80,7 @@ int *num; { if (n == 0) { - des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)ti,schedule,DES_ENCRYPT); dp=(char *)d; t=ti[0]; l2c(t,dp); t=ti[1]; l2c(t,dp); diff --git a/secure/lib/libdes/ofb_enc.c b/secure/lib/libdes/ofb_enc.c index e95caddd85c6..27b369183e50 100644 --- a/secure/lib/libdes/ofb_enc.c +++ b/secure/lib/libdes/ofb_enc.c @@ -1,5 +1,5 @@ -/* lib/des/ofb_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/ofb_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -61,11 +61,11 @@ long length; des_key_schedule schedule; des_cblock (*ivec); { - register unsigned long d0,d1,v0,v1,n=(numbits+7)/8; - register unsigned long mask0,mask1; + register DES_LONG d0,d1,v0,v1,n=(numbits+7)/8; + register DES_LONG mask0,mask1; register long l=length; register int num=numbits; - unsigned long ti[2]; + DES_LONG ti[2]; unsigned char *iv; if (num > 64) return; @@ -93,7 +93,7 @@ des_cblock (*ivec); ti[1]=v1; while (l-- > 0) { - des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)ti,schedule,DES_ENCRYPT); c2ln(in,d0,d1,n); in+=n; d0=(d0^ti[0])&mask0; diff --git a/secure/lib/libdes/pcbc_enc.c b/secure/lib/libdes/pcbc_enc.c index b17a6d702080..1271d02cf8f0 100644 --- a/secure/lib/libdes/pcbc_enc.c +++ b/secure/lib/libdes/pcbc_enc.c @@ -1,5 +1,5 @@ -/* lib/des/pcbc_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/pcbc_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -55,8 +55,8 @@ des_key_schedule schedule; des_cblock (*ivec); int encrypt; { - register unsigned long sin0,sin1,xor0,xor1,tout0,tout1; - unsigned long tin[2]; + register DES_LONG sin0,sin1,xor0,xor1,tout0,tout1; + DES_LONG tin[2]; unsigned char *in,*out,*iv; in=(unsigned char *)input; @@ -78,7 +78,7 @@ int encrypt; c2ln(in,sin0,sin1,length); tin[0]=sin0^xor0; tin[1]=sin1^xor1; - des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); + des_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT); tout0=tin[0]; tout1=tin[1]; xor0=sin0^tout0; @@ -96,7 +96,7 @@ int encrypt; c2l(in,sin1); tin[0]=sin0; tin[1]=sin1; - des_encrypt((unsigned long *)tin,schedule,DES_DECRYPT); + des_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT); tout0=tin[0]^xor0; tout1=tin[1]^xor1; if (length >= 8) diff --git a/secure/lib/libdes/podd.h b/secure/lib/libdes/podd.h index 96846d24ca47..420fc43fa3e4 100644 --- a/secure/lib/libdes/podd.h +++ b/secure/lib/libdes/podd.h @@ -1,5 +1,5 @@ -/* lib/des/podd.h */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/podd.h */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written diff --git a/secure/lib/libdes/qud_cksm.c b/secure/lib/libdes/qud_cksm.c index e2c6ffd2ef85..dc74c94cd1ff 100644 --- a/secure/lib/libdes/qud_cksm.c +++ b/secure/lib/libdes/qud_cksm.c @@ -1,5 +1,5 @@ -/* lib/des/qud_cksm.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/qud_cksm.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -53,33 +53,33 @@ #include "des_locl.h" /* bug fix for dos - 7/6/91 - Larry hughes@logos.ucs.indiana.edu */ -#define B0(a) (((unsigned long)(a))) -#define B1(a) (((unsigned long)(a))<<8) -#define B2(a) (((unsigned long)(a))<<16) -#define B3(a) (((unsigned long)(a))<<24) +#define Q_B0(a) (((DES_LONG)(a))) +#define Q_B1(a) (((DES_LONG)(a))<<8) +#define Q_B2(a) (((DES_LONG)(a))<<16) +#define Q_B3(a) (((DES_LONG)(a))<<24) /* used to scramble things a bit */ /* Got the value MIT uses via brute force :-) 2/10/90 eay */ -#define NOISE ((unsigned long)83653421L) +#define NOISE ((DES_LONG)83653421L) -unsigned long des_quad_cksum(input, output, length, out_count, seed) +DES_LONG des_quad_cksum(input, output, length, out_count, seed) des_cblock (*input); des_cblock (*output); long length; int out_count; des_cblock (*seed); { - unsigned long z0,z1,t0,t1; + DES_LONG z0,z1,t0,t1; int i; - long l=0; + long l; unsigned char *cp; unsigned char *lp; if (out_count < 1) out_count=1; lp=(unsigned char *)output; - z0=B0((*seed)[0])|B1((*seed)[1])|B2((*seed)[2])|B3((*seed)[3]); - z1=B0((*seed)[4])|B1((*seed)[5])|B2((*seed)[6])|B3((*seed)[7]); + z0=Q_B0((*seed)[0])|Q_B1((*seed)[1])|Q_B2((*seed)[2])|Q_B3((*seed)[3]); + z1=Q_B0((*seed)[4])|Q_B1((*seed)[5])|Q_B2((*seed)[6])|Q_B3((*seed)[7]); for (i=0; ((i<4)&&(i 1) { - t0= (unsigned long)(*(cp++)); - t0|=(unsigned long)B1(*(cp++)); + t0= (DES_LONG)(*(cp++)); + t0|=(DES_LONG)Q_B1(*(cp++)); l--; } else - t0= (unsigned long)(*(cp++)); + t0= (DES_LONG)(*(cp++)); l--; /* add */ t0+=z0; @@ -112,7 +112,7 @@ des_cblock (*seed); * is one huge number and it is returned in a * host dependant byte order. */ - static unsigned long ltmp=1; + static DES_LONG ltmp=1; static unsigned char *c=(unsigned char *)<mp; if (c[0]) diff --git a/secure/lib/libdes/rand_key.c b/secure/lib/libdes/rand_key.c index c4c4caaf95ca..4d20201c58ea 100644 --- a/secure/lib/libdes/rand_key.c +++ b/secure/lib/libdes/rand_key.c @@ -1,5 +1,5 @@ -/* lib/des/rand_key.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/rand_key.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -62,12 +62,12 @@ void des_random_key(ret) unsigned char *ret; { des_key_schedule ks; - static unsigned long c=0; + static DES_LONG c=0; static unsigned short pid=0; static des_cblock data={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}; des_cblock key; unsigned char *p; - unsigned long t; + DES_LONG t; int i; #ifdef MSDOS @@ -85,9 +85,9 @@ unsigned char *ret; } seed=0; } - t=(unsigned long)time(NULL); + t=(DES_LONG)time(NULL); l2c(t,p); - t=(unsigned long)((pid)|((c++)<<16)); + t=(DES_LONG)((pid)|((c++)<<16)); l2c(t,p); des_set_odd_parity((des_cblock *)data); diff --git a/secure/lib/libdes/read_pwd.c b/secure/lib/libdes/read_pwd.c index bebad0c1da97..275f7322f4bd 100644 --- a/secure/lib/libdes/read_pwd.c +++ b/secure/lib/libdes/read_pwd.c @@ -1,5 +1,5 @@ -/* lib/des/read_pwd.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/read_pwd.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -45,6 +45,12 @@ * [including the GNU Public Licence.] */ +#ifdef WIN16TTY +#undef WIN16 +#undef _WINDOWS +#include +#endif + /* 06-Apr-92 Luke Brennan Support for VMS */ #include "des_locl.h" #include @@ -55,12 +61,18 @@ * TERMIO, TERMIOS, VMS, MSDOS and SGTTY */ -#if defined(sgi) || defined(__sgi) +#if defined(__sgi) && !defined(TERMIOS) #define TERMIOS #undef TERMIO #undef SGTTY #endif +#if defined(linux) && !defined(TERMIO) +#undef TERMIOS +#define TERMIO +#undef SGTTY +#endif + #ifdef _LIBC #define TERMIO #endif @@ -93,7 +105,7 @@ #define TTY_set(tty,data) ioctl(tty,TIOCSETP,data) #endif -#ifndef _LIBC +#if !defined(_LIBC) && !defined(MSDOS) #include #endif @@ -124,7 +136,7 @@ static int read_pw(char *buf, char *buff, int size, char *prompt, int verify); static void recsig(int); static void pushsig(void); static void popsig(void); -#ifdef MSDOS +#if defined(MSDOS) && !defined(WIN16) static int noecho_fgets(char *buf, int size, FILE *tty); #endif #else @@ -133,12 +145,16 @@ static int read_pw(); static void recsig(); static void pushsig(); static void popsig(); -#ifdef MSDOS +#if defined(MSDOS) && !defined(WIN16) static int noecho_fgets(); #endif #endif +#ifndef NOPROTO +static void (*savsig[NX509_SIG])(int ); +#else static void (*savsig[NX509_SIG])(); +#endif static jmp_buf save; int des_read_password(key, prompt, verify) @@ -186,6 +202,8 @@ int verify; return(ret); } +#ifndef WIN16 + static void read_till_nl(in) FILE *in; { @@ -197,6 +215,7 @@ FILE *in; } while (strchr(buf,'\n') == NULL); } + /* return 0 if ok, 1 (or -1) otherwise */ static int read_pw(buf, buff, size, prompt, verify) char *buf; @@ -278,12 +297,13 @@ int verify; buf[0]='\0'; fgets(buf,size,tty); if (feof(tty)) goto error; + if (ferror(tty)) goto error; if ((p=(char *)strchr(buf,'\n')) != NULL) *p='\0'; else read_till_nl(tty); if (verify) { - fprintf(stderr,"\nVerifying password %s",prompt); + fprintf(stderr,"\nVerifying password - %s",prompt); fflush(stderr); buff[0]='\0'; fgets(buff,size,tty); @@ -305,6 +325,9 @@ int verify; error: fprintf(stderr,"\n"); +#ifdef DEBUG + perror("fgets(tty)"); +#endif /* What can we do if there is an error? */ #if defined(TTY_set) && !defined(VMS) if (ps >= 2) TTY_set(fileno(tty),&tty_orig); @@ -323,6 +346,22 @@ int verify; return(!ok); } +#else /* WIN16 */ + +static int read_pw(buf, buff, size, prompt, verify) +char *buf; +char *buff; +int size; +char *prompt; +int verify; + { + memset(buf,0,size); + memset(buff,0,size); + return(0); + } + +#endif + static void pushsig() { int i; @@ -348,13 +387,13 @@ int i; #endif } -#ifdef MSDOS +#if defined(MSDOS) && !defined(WIN16) static int noecho_fgets(buf,size,tty) char *buf; int size; FILE *tty; { - int i,n; + int i; char *p; p=buf; @@ -366,7 +405,11 @@ FILE *tty; break; } size--; +#ifdef WIN16TTY + i=_inchar(); +#else i=getch(); +#endif if (i == '\r') i='\n'; *(p++)=i; if (i == '\n') diff --git a/secure/lib/libdes/rpc_des.h b/secure/lib/libdes/rpc_des.h index e316b78a0d8f..0b0bbf58dcc8 100644 --- a/secure/lib/libdes/rpc_des.h +++ b/secure/lib/libdes/rpc_des.h @@ -1,5 +1,5 @@ -/* lib/des/rpc_des.h */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/rpc_des.h */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -83,6 +83,11 @@ #define DES_MAXLEN 65536 /* maximum # of bytes to encrypt */ #define DES_QUICKLEN 16 /* maximum # of bytes to encrypt quickly */ +#ifdef HEADER_DES_H +#undef ENCRYPT +#undef DECRYPT +#endif + enum desdir { ENCRYPT, DECRYPT }; enum desmode { CBC, ECB }; diff --git a/secure/lib/libdes/rpc_enc.c b/secure/lib/libdes/rpc_enc.c index b9b38986c951..d674865c9d6f 100644 --- a/secure/lib/libdes/rpc_enc.c +++ b/secure/lib/libdes/rpc_enc.c @@ -1,5 +1,5 @@ -/* lib/des/rpc_enc.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/rpc_enc.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -47,7 +47,7 @@ #include "rpc_des.h" #include "des_locl.h" -#include "version.h" +#include "des_ver.h" #ifndef NOPROTO int _des_crypt(char *buf,int len,struct desparams *desp); @@ -60,7 +60,7 @@ char *buf; int len; struct desparams *desp; { - Key_schedule ks; + des_key_schedule ks; int enc; des_set_key((des_cblock *)desp->des_key,ks); diff --git a/secure/lib/libdes/rpw.c b/secure/lib/libdes/rpw.c index 2213a56a93ce..69c6b8490a88 100644 --- a/secure/lib/libdes/rpw.c +++ b/secure/lib/libdes/rpw.c @@ -1,5 +1,5 @@ -/* lib/des/rpw.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/rpw.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written diff --git a/secure/lib/libdes/set_key.c b/secure/lib/libdes/set_key.c index 209a07d35726..8365ee4ab6f4 100644 --- a/secure/lib/libdes/set_key.c +++ b/secure/lib/libdes/set_key.c @@ -1,5 +1,5 @@ -/* lib/des/set_key.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/set_key.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -140,8 +140,6 @@ des_cblock (*key); #define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\ (a)=(a)^(t)^(t>>(16-(n)))) -static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; - /* return 0 if key parity is odd (correct), * return -1 if key parity error, * return -2 if illegal weak key. @@ -150,9 +148,10 @@ int des_set_key(key, schedule) des_cblock (*key); des_key_schedule schedule; { - register unsigned long c,d,t,s; + static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; + register DES_LONG c,d,t,s; register unsigned char *in; - register unsigned long *k; + register DES_LONG *k; register int i; if (des_check_key) @@ -164,7 +163,7 @@ des_key_schedule schedule; return(-2); } - k=(unsigned long *)schedule; + k=(DES_LONG *)schedule; in=(unsigned char *)key; c2l(in,c); diff --git a/secure/lib/libdes/shifts.pl b/secure/lib/libdes/shifts.pl index 3c4039eb9c1f..2865f561b91f 100755 --- a/secure/lib/libdes/shifts.pl +++ b/secure/lib/libdes/shifts.pl @@ -1,4 +1,4 @@ -sub lab_shift +#!/usr/bin/perl { local(*a,$n)=@_; local(@r,$i,$j,$k,$d,@z); diff --git a/secure/lib/libdes/sk.h b/secure/lib/libdes/sk.h index e5997d93af6f..217c8ab0fb0c 100644 --- a/secure/lib/libdes/sk.h +++ b/secure/lib/libdes/sk.h @@ -1,5 +1,5 @@ -/* lib/des/sk.h */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/sk.h */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -45,7 +45,7 @@ * [including the GNU Public Licence.] */ -static const unsigned long des_skb[8][64]={ +static const DES_LONG des_skb[8][64]={ { /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ 0x00000000L,0x00000010L,0x20000000L,0x20000010L, diff --git a/secure/lib/libdes/speed.c b/secure/lib/libdes/speed.c index ee517b18650d..583c0a9f2a22 100644 --- a/secure/lib/libdes/speed.c +++ b/secure/lib/libdes/speed.c @@ -1,5 +1,5 @@ -/* lib/des/speed.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/speed.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -197,7 +197,7 @@ char **argv; des_set_key((C_Block *)key3,sch3); #ifndef SIGALRM - printf("First we calculate the aproximate speed ...\n"); + printf("First we calculate the approximate speed ...\n"); des_set_key((C_Block *)key,sch); count=10; do { @@ -257,7 +257,7 @@ char **argv; #endif Time_F(START); for (count=0,run=1; COND(cc); count++) - des_cbc_encrypt((C_Block *)buf,(C_Block *)buf,BUFSIZE,&(sch[0]), + des_ncbc_encrypt((C_Block *)buf,(C_Block *)buf,BUFSIZE,&(sch[0]), (C_Block *)&(key[0]),DES_ENCRYPT); d=Time_F(STOP); printf("%ld des_cbc_encrypt's of %ld byte blocks in %.2f second\n", diff --git a/secure/lib/libdes/spr.h b/secure/lib/libdes/spr.h index d9b81ce919d2..58cc13085fdf 100644 --- a/secure/lib/libdes/spr.h +++ b/secure/lib/libdes/spr.h @@ -1,5 +1,5 @@ -/* lib/des/spr.h */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/spr.h */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written @@ -45,7 +45,7 @@ * [including the GNU Public Licence.] */ -static const unsigned long des_SPtrans[8][64]={ +static const DES_LONG des_SPtrans[8][64]={ { /* nibble 0 */ 0x00820200L, 0x00020000L, 0x80800000L, 0x80820200L, diff --git a/secure/lib/libdes/str2key.c b/secure/lib/libdes/str2key.c index 278ba0f921b0..af889d7efb23 100644 --- a/secure/lib/libdes/str2key.c +++ b/secure/lib/libdes/str2key.c @@ -1,5 +1,5 @@ -/* lib/des/str2key.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/str2key.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written diff --git a/secure/lib/libdes/supp.c b/secure/lib/libdes/supp.c index 8cd9289f0f06..0c959cc81ac3 100644 --- a/secure/lib/libdes/supp.c +++ b/secure/lib/libdes/supp.c @@ -1,5 +1,5 @@ -/* lib/des/supp.c */ -/* Copyright (C) 1995 Eric Young (eay@mincom.oz.au) +/* crypto/des/supp.c */ +/* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au) * All rights reserved. * * This file is part of an SSL implementation written diff --git a/secure/lib/libdes/testdes.pl b/secure/lib/libdes/testdes.pl index 01a165a963d1..67fbd47f3695 100755 --- a/secure/lib/libdes/testdes.pl +++ b/secure/lib/libdes/testdes.pl @@ -1,4 +1,4 @@ -#!/usr/local/bin/perl +#!/usr/bin/perl # des.pl tesing code diff --git a/secure/lib/libdes/times b/secure/lib/libdes/times index 86d10a035ba8..f5080ef99c0f 100644 --- a/secure/lib/libdes/times +++ b/secure/lib/libdes/times @@ -1,3 +1,32 @@ +existing library on a DEC 3000/500 +set_key per sec = 256294.06 ( 3.9uS) +DES ecb bytes per sec = 3553694.40 ( 2.3uS) +DES cbc bytes per sec = 3661004.80 ( 2.2uS) +DES ede cbc bytes per sec = 1353115.99 ( 5.9uS) +crypt per sec = 16829.40 ( 59.4uS) + +Intel P6/200 (NEXTSTEP) - cc -O3 (cc: gcc 2.5.8) +set_key per sec = 219220.82 ( 4.6uS) +DES ecb bytes per sec = 2438014.04 ( 3.3uS) +DES cbc bytes per sec = 2467648.85 ( 3.2uS) +DES ede cbc bytes per sec = 942121.58 ( 8.5uS) +crypt per sec = 11398.73 ( 87.7uS) + +# DECstation Alpha 3000 Model 700 AXP / OSF1 V3.0 +# gcc 2.6.3 / Young libdes 3.21 +set_key per sec = 149369.74 ( 6.7uS) +DES ecb bytes per sec = 2011976.68 ( 4.0uS) +DES cbc bytes per sec = 2002245.35 ( 4.0uS) +DES ede cbc bytes per sec = 793677.19 ( 10.1uS) +crypt per sec = 9244.52 (108.2uS) + +# Sun Ultra I gcc 2.7.2 / Young libdes 3.21 +set_key per sec = 147172.22 ( 6.8uS) +DES ecb bytes per sec = 1815054.70 ( 4.4uS) +DES cbc bytes per sec = 1829405.18 ( 4.4uS) +DES ede cbc bytes per sec = 714490.23 ( 11.2uS) +crypt per sec = 8896.24 (112.4uS) + SGI Challenge (MIPS R4400 200mhz) - gcc -O2 set_key per sec = 114141.13 ( 8.8uS) DES ecb bytes per sec = 1573472.84 ( 5.1uS) @@ -22,6 +51,20 @@ DES ecb bytes per sec = 1338138.45 ( 6.0uS) DES cbc bytes per sec = 1356515.84 ( 5.9uS) crypt per sec = 6223.92 (160.7uS) +Intel P5/133 (NEXTSTEP) - cc -O3 (cc: gcc 2.5.8) +set_key per sec = 81923.10 ( 12.2uS) +DES ecb bytes per sec = 1104711.61 ( 7.2uS) +DES cbc bytes per sec = 1091536.05 ( 7.3uS) +DES ede cbc bytes per sec = 410502.62 ( 19.5uS) +crypt per sec = 4849.60 (206.2uS) + +Sun SPARC 20 (NEXTSTEP) - cc -O3 (cc: gcc 2.5.8) +set_key per sec = 60973.05 ( 16.4uS) +DES ecb bytes per sec = 806032.15 ( 9.9uS) +DES cbc bytes per sec = 801534.95 ( 10.0uS) +DES ede cbc bytes per sec = 298799.73 ( 26.8uS) +crypt per sec = 3678.42 (271.9uS) + SGI Indy (MIPS R4600 133mhz) -cc -O2 set_key per sec = 88470.54 ( 11.3uS) DES ecb bytes per sec = 1023040.33 ( 7.8uS)