Merged in libdes3.21-branch
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@473 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		
							
								
								
									
										50
									
								
								lib/des/COPYRIGHT
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								lib/des/COPYRIGHT
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| Copyright (C) 1995 Eric Young (eay@mincom.oz.au) | ||||
| All rights reserved. | ||||
|  | ||||
| This package is an DES implementation written by Eric Young (eay@mincom.oz.au). | ||||
| The implementation was written so as to conform with MIT's libdes. | ||||
|  | ||||
| This library is free for commercial and non-commercial use as long as | ||||
| the following conditions are aheared to.  The following conditions | ||||
| apply to all code found in this distribution. | ||||
|  | ||||
| Copyright remains Eric Young's, and as such any Copyright notices in | ||||
| the code are not to be removed. | ||||
| If this package is used in a product, Eric Young should be given attribution | ||||
| as the author of that the SSL library.  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 license 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 distrubution license | ||||
| [including the GNU Public License.] | ||||
|  | ||||
| The reason behind this being stated in this direct manner is past | ||||
| experience in code simply being copied and the attribution removed | ||||
| from it and then being distributed as part of other packages. This | ||||
| implementation was a non-trivial and unpaid effort. | ||||
							
								
								
									
										19
									
								
								lib/des/DES.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								lib/des/DES.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| package DES; | ||||
|  | ||||
| require Exporter; | ||||
| require DynaLoader; | ||||
| @ISA = qw(Exporter DynaLoader); | ||||
| # Items to export into callers namespace by default | ||||
| # (move infrequently used names to @EXPORT_OK below) | ||||
| @EXPORT = qw( | ||||
| ); | ||||
| # Other items we are prepared to export if requested | ||||
| @EXPORT_OK = qw( | ||||
| crypt | ||||
| ); | ||||
|  | ||||
| # Preloaded methods go here.  Autoload methods go after __END__, and are | ||||
| # processed by the autosplit program. | ||||
| bootstrap DES; | ||||
| 1; | ||||
| __END__ | ||||
							
								
								
									
										16
									
								
								lib/des/DES.pod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								lib/des/DES.pod
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| crypt	<= 	crypt(buf,salt) | ||||
| key	<=	set_odd_parity(key) | ||||
| int	<=	is_weak_key(key) | ||||
| keysched<=	set_key(key) | ||||
| key	<=	ecb_encrypt(string8,ks,enc) | ||||
| key	<=	ecb3_encrypt(input,ks1,ks2,enc) | ||||
| string	<=	cbc_encrypt(input,ks,ivec,enc)			=> ivec  | ||||
| string	<=	cbc3_encrypt(input,ks1,ks2,ivec1,ivec2,enc)	=> ivec1&ivec2  | ||||
| ck1,ck2	<=	cbc_cksum(input,ks,ivec)			=> ivec | ||||
| string	<=	pcbc_encrypt(input,ks,ivec,enc)			=> ivec  | ||||
| string	<=	ofb_encrypt(input,numbits,ks,ivec)		=> ivec | ||||
| string	<=	cfb_encrypt(input,numbits,ks,ivec,enc)		=> ivec | ||||
| key	<=	random_key() | ||||
| key	<=	string_to_key(string) | ||||
| key1,key2<=	string_to_2keys(string) | ||||
|  | ||||
							
								
								
									
										268
									
								
								lib/des/DES.xs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										268
									
								
								lib/des/DES.xs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,268 @@ | ||||
| #include "EXTERN.h" | ||||
| #include "perl.h" | ||||
| #include "XSUB.h" | ||||
| #include "des.h" | ||||
|  | ||||
| #define deschar	char | ||||
| static STRLEN len; | ||||
|  | ||||
| static int | ||||
| not_here(s) | ||||
| char *s; | ||||
| { | ||||
|     croak("%s not implemented on this architecture", s); | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
| MODULE = DES	PACKAGE = DES	PREFIX = des_ | ||||
|  | ||||
| char * | ||||
| des_crypt(buf,salt) | ||||
| 	char *	buf | ||||
| 	char *	salt | ||||
|  | ||||
| void | ||||
| des_set_odd_parity(key) | ||||
| 	des_cblock *	key | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	SV *s; | ||||
|  | ||||
| 	s=sv_newmortal(); | ||||
| 	sv_setpvn(s,(char *)key,8); | ||||
| 	des_set_odd_parity((des_cblock *)SvPV(s,na)); | ||||
| 	PUSHs(s); | ||||
| 	} | ||||
|  | ||||
| int | ||||
| des_is_weak_key(key) | ||||
| 	des_cblock *	key | ||||
|  | ||||
| des_key_schedule | ||||
| des_set_key(key) | ||||
| 	des_cblock *	key | ||||
| CODE: | ||||
| 	des_set_key(key,RETVAL); | ||||
| OUTPUT: | ||||
| RETVAL | ||||
|  | ||||
| des_cblock | ||||
| des_ecb_encrypt(input,ks,encrypt) | ||||
| 	des_cblock *	input | ||||
| 	des_key_schedule *	ks | ||||
| 	int	encrypt | ||||
| CODE: | ||||
| 	des_ecb_encrypt(input,&RETVAL,*ks,encrypt); | ||||
| OUTPUT: | ||||
| RETVAL | ||||
|  | ||||
| void | ||||
| des_cbc_encrypt(input,ks,ivec,encrypt) | ||||
| 	char *	input | ||||
| 	des_key_schedule *	ks | ||||
| 	des_cblock *	ivec | ||||
| 	int	encrypt | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	SV *s; | ||||
| 	STRLEN len,l; | ||||
| 	char *c; | ||||
|  | ||||
| 	l=SvCUR(ST(0)); | ||||
| 	len=((((unsigned long)l)+7)/8)*8; | ||||
| 	s=sv_newmortal(); | ||||
| 	sv_setpvn(s,"",0); | ||||
| 	SvGROW(s,len); | ||||
| 	SvCUR_set(s,len); | ||||
| 	c=(char *)SvPV(s,na); | ||||
| 	des_cbc_encrypt((des_cblock *)input,(des_cblock *)c, | ||||
| 		l,*ks,ivec,encrypt); | ||||
| 	sv_setpvn(ST(2),(char *)c[len-8],8); | ||||
| 	PUSHs(s); | ||||
| 	} | ||||
|  | ||||
| void | ||||
| des_cbc3_encrypt(input,ks1,ks2,ivec1,ivec2,encrypt) | ||||
| 	char *	input | ||||
| 	des_key_schedule *	ks1 | ||||
| 	des_key_schedule *	ks2 | ||||
| 	des_cblock *	ivec1 | ||||
| 	des_cblock *	ivec2 | ||||
| 	int	encrypt | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	SV *s; | ||||
| 	STRLEN len,l; | ||||
|  | ||||
| 	l=SvCUR(ST(0)); | ||||
| 	len=((((unsigned long)l)+7)/8)*8; | ||||
| 	s=sv_newmortal(); | ||||
| 	sv_setpvn(s,"",0); | ||||
| 	SvGROW(s,len); | ||||
| 	SvCUR_set(s,len); | ||||
| 	des_3cbc_encrypt((des_cblock *)input,(des_cblock *)SvPV(s,na), | ||||
| 		l,*ks1,*ks2,ivec1,ivec2,encrypt); | ||||
| 	sv_setpvn(ST(3),(char *)ivec1,8); | ||||
| 	sv_setpvn(ST(4),(char *)ivec2,8); | ||||
| 	PUSHs(s); | ||||
| 	} | ||||
|  | ||||
| void | ||||
| des_cbc_cksum(input,ks,ivec) | ||||
| 	char *	input | ||||
| 	des_key_schedule *	ks | ||||
| 	des_cblock *	ivec | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	SV *s1,*s2; | ||||
| 	STRLEN len,l; | ||||
| 	des_cblock c; | ||||
| 	unsigned long i1,i2; | ||||
|  | ||||
| 	s1=sv_newmortal(); | ||||
| 	s2=sv_newmortal(); | ||||
| 	l=SvCUR(ST(0)); | ||||
| 	des_cbc_cksum((des_cblock *)input,(des_cblock *)c, | ||||
| 		l,*ks,ivec); | ||||
| 	i1=c[4]|(c[5]<<8)|(c[6]<<16)|(c[7]<<24); | ||||
| 	i2=c[0]|(c[1]<<8)|(c[2]<<16)|(c[3]<<24); | ||||
| 	sv_setiv(s1,i1); | ||||
| 	sv_setiv(s2,i2); | ||||
| 	sv_setpvn(ST(2),(char *)c,8); | ||||
| 	PUSHs(s1); | ||||
| 	PUSHs(s2); | ||||
| 	} | ||||
|  | ||||
| void | ||||
| des_cfb_encrypt(input,numbits,ks,ivec,encrypt) | ||||
| 	char *	input | ||||
| 	int	numbits | ||||
| 	des_key_schedule *	ks | ||||
| 	des_cblock *	ivec | ||||
| 	int	encrypt | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	SV *s; | ||||
| 	STRLEN len; | ||||
| 	char *c; | ||||
|  | ||||
| 	len=SvCUR(ST(0)); | ||||
| 	s=sv_newmortal(); | ||||
| 	sv_setpvn(s,"",0); | ||||
| 	SvGROW(s,len); | ||||
| 	SvCUR_set(s,len); | ||||
| 	c=(char *)SvPV(s,na); | ||||
| 	des_cfb_encrypt((unsigned char *)input,(unsigned char *)c, | ||||
| 		(int)numbits,(long)len,*ks,ivec,encrypt); | ||||
| 	sv_setpvn(ST(3),(char *)ivec,8); | ||||
| 	PUSHs(s); | ||||
| 	} | ||||
|  | ||||
| des_cblock * | ||||
| des_ecb3_encrypt(input,ks1,ks2,encrypt) | ||||
| 	des_cblock *	input | ||||
| 	des_key_schedule *	ks1 | ||||
| 	des_key_schedule *	ks2 | ||||
| 	int	encrypt | ||||
| CODE: | ||||
| 	{ | ||||
| 	des_cblock c; | ||||
|  | ||||
| 	des_3ecb_encrypt((des_cblock *)input,(des_cblock *)&c, | ||||
| 		*ks1,*ks2,encrypt); | ||||
| 	RETVAL= &c; | ||||
| 	} | ||||
| OUTPUT: | ||||
| RETVAL | ||||
|  | ||||
| void | ||||
| des_ofb_encrypt(input,numbits,ks,ivec) | ||||
| 	unsigned char *	input | ||||
| 	int	numbits | ||||
| 	des_key_schedule *	ks | ||||
| 	des_cblock *	ivec | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	SV *s; | ||||
| 	STRLEN len,l; | ||||
| 	unsigned char *c; | ||||
|  | ||||
| 	len=SvCUR(ST(0)); | ||||
| 	s=sv_newmortal(); | ||||
| 	sv_setpvn(s,"",0); | ||||
| 	SvGROW(s,len); | ||||
| 	SvCUR_set(s,len); | ||||
| 	c=(unsigned char *)SvPV(s,na); | ||||
| 	des_ofb_encrypt((unsigned char *)input,(unsigned char *)c, | ||||
| 		numbits,len,*ks,ivec); | ||||
| 	sv_setpvn(ST(3),(char *)ivec,8); | ||||
| 	PUSHs(s); | ||||
| 	} | ||||
|  | ||||
| void | ||||
| des_pcbc_encrypt(input,ks,ivec,encrypt) | ||||
| 	char *	input | ||||
| 	des_key_schedule *	ks | ||||
| 	des_cblock *	ivec | ||||
| 	int	encrypt | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	SV *s; | ||||
| 	STRLEN len,l; | ||||
| 	char *c; | ||||
|  | ||||
| 	l=SvCUR(ST(0)); | ||||
| 	len=((((unsigned long)l)+7)/8)*8; | ||||
| 	s=sv_newmortal(); | ||||
| 	sv_setpvn(s,"",0); | ||||
| 	SvGROW(s,len); | ||||
| 	SvCUR_set(s,len); | ||||
| 	c=(char *)SvPV(s,na); | ||||
| 	des_pcbc_encrypt((des_cblock *)input,(des_cblock *)c, | ||||
| 		l,*ks,ivec,encrypt); | ||||
| 	sv_setpvn(ST(2),(char *)c[len-8],8); | ||||
| 	PUSHs(s); | ||||
| 	} | ||||
|  | ||||
| des_cblock * | ||||
| des_random_key() | ||||
| CODE: | ||||
| 	{ | ||||
| 	des_cblock c; | ||||
|  | ||||
| 	des_random_key(c); | ||||
| 	RETVAL=&c; | ||||
| 	} | ||||
| OUTPUT: | ||||
| RETVAL | ||||
|  | ||||
| des_cblock * | ||||
| des_string_to_key(str) | ||||
| char *	str | ||||
| CODE: | ||||
| 	{ | ||||
| 	des_cblock c; | ||||
|  | ||||
| 	des_string_to_key(str,&c); | ||||
| 	RETVAL=&c; | ||||
| 	} | ||||
| OUTPUT: | ||||
| RETVAL | ||||
|  | ||||
| void | ||||
| des_string_to_2keys(str) | ||||
| char *	str | ||||
| PPCODE: | ||||
| 	{ | ||||
| 	des_cblock c1,c2; | ||||
| 	SV *s1,*s2; | ||||
|  | ||||
| 	des_string_to_2keys(str,&c1,&c2); | ||||
| 	EXTEND(sp,2); | ||||
| 	s1=sv_newmortal(); | ||||
| 	sv_setpvn(s1,(char *)c1,8); | ||||
| 	s2=sv_newmortal(); | ||||
| 	sv_setpvn(s2,(char *)c2,8); | ||||
| 	PUSHs(s1); | ||||
| 	PUSHs(s2); | ||||
| 	} | ||||
| @@ -1,19 +1,21 @@ | ||||
| /* General stuff */ | ||||
| CHANGES		- Changes since the last posting to comp.sources.misc. | ||||
| ARTISTIC	- Copying info. | ||||
| COPYING		- Copying info. | ||||
| COPYRIGHT	- Copyright info. | ||||
| MODES.DES	- A description of the features of the different modes of DES. | ||||
| FILES		- This file. | ||||
| INSTALL		- How to make things compile. | ||||
| Imakefile	- For use with kerberos. | ||||
| README		- What this package is. | ||||
| VERSION		- Which version this is. | ||||
| VERSION		- Which version this is and what was changed. | ||||
| KERBEROS	- Kerberos version 4 notes. | ||||
| makefile	- The make file. | ||||
| times		- Some outputs from 'speed' on my local machines. | ||||
| Makefile.PL	- An old makefile to build with perl5, not current. | ||||
| Makefile.ssl	- The SSLeay makefile | ||||
| Makefile.uni	- The normal unix makefile. | ||||
| GNUmakefile	- The makefile for use with glibc. | ||||
| makefile.bc	- A Borland C makefile | ||||
| times		- Some outputs from 'speed' on some machines. | ||||
| vms.com		- For use when compiling under VMS | ||||
|  | ||||
| /* My sunOS des(1) replacement */ | ||||
| /* My SunOS des(1) replacement */ | ||||
| des.c		- des(1) source code. | ||||
| des.man		- des(1) manual. | ||||
|  | ||||
| @@ -26,12 +28,23 @@ rpw.c		- Source for libdes.a testing password reading routines. | ||||
| des_crypt.man	- libdes.a manual page. | ||||
| des.h		- Public libdes.a header file. | ||||
| ecb_enc.c	- des_ecb_encrypt() source, this contains the basic DES code. | ||||
| 3ecb_enc.c	- des_3ecb_encrypt() source. | ||||
| ecb3_enc.c	- des_ecb3_encrypt() source. | ||||
| cbc_ckm.c	- des_cbc_cksum() source. | ||||
| cbc_enc.c	- des_cbc_encrypt() source. | ||||
| 3cbc_enc.c	- des_3cbc_encrypt() source. | ||||
| ncbc_enc.c	- des_cbc_encrypt() that is 'normal' in that it copies | ||||
| 		  the new iv values back in the passed iv vector. | ||||
| ede_enc.c	- des_ede3_cbc_encrypt() cbc mode des using triple DES. | ||||
| cbc3_enc.c	- des_3cbc_encrypt() source, don't use this function. | ||||
| cfb_enc.c	- des_cfb_encrypt() source. | ||||
| cfb64enc.c	- des_cfb64_encrypt() cfb in 64 bit mode but setup to be | ||||
| 		  used as a stream cipher. | ||||
| cfb64ede.c	- des_ede3_cfb64_encrypt() cfb in 64 bit mode but setup to be | ||||
| 		  used as a stream cipher and using triple DES. | ||||
| ofb_enc.c	- des_cfb_encrypt() source. | ||||
| ofb64_enc.c	- des_ofb_encrypt() ofb in 64 bit mode but setup to be | ||||
| 		  used as a stream cipher. | ||||
| ofb64ede.c	- des_ede3_ofb64_encrypt() ofb in 64 bit mode but setup to be | ||||
| 		  used as a stream cipher and using triple DES. | ||||
| enc_read.c	- des_enc_read() source. | ||||
| enc_writ.c	- des_enc_write() source. | ||||
| pcbc_enc.c	- des_pcbc_encrypt() source. | ||||
| @@ -45,6 +58,9 @@ 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 | ||||
| 		  version string. | ||||
| des.doc		- SSLeay documentation for the library. | ||||
|  | ||||
| /* The perl scripts - you can ignore these files they are only | ||||
|  * included for the curious */ | ||||
| @@ -58,3 +74,23 @@ PC1		- Output of doPC1 should be the same as output from PC1. | ||||
| PC2		- used in development of doPC2. | ||||
| shifts.pl	- Perl library used by my perl scripts. | ||||
|  | ||||
| /* I started making a perl5 dynamic library for libdes | ||||
|  * but did not fully finish, these files are part of that effort. */ | ||||
| DES.pm | ||||
| DES.pod | ||||
| DES.xs | ||||
| t | ||||
| typemap | ||||
|  | ||||
| /* The following are for use with sun RPC implementaions. */ | ||||
| rpc_des.h | ||||
| rpc_enc.c | ||||
|  | ||||
| /* The following are contibuted by Mark Murray <mark@grondar.za>.  They | ||||
|  * are not normally built into libdes due to machine specific routines | ||||
|  * contained in them.  They are for use in the most recent incarnation of | ||||
|  * export kerberos v 4 (eBones). */ | ||||
| supp.c | ||||
| new_rkey.c | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										35
									
								
								lib/des/GNUmakefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								lib/des/GNUmakefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| # This was GNUmakefile | ||||
| # I have changed the library a bit since I was last able to test the | ||||
| # build so this may require a little tweaking. | ||||
| # have fun. | ||||
|  | ||||
| ifeq ($(wildcard ../Rules),) | ||||
| # no glibc | ||||
| include Makefile.uni | ||||
| else | ||||
| # We are part of glibc | ||||
| default_cflags:= -O2 | ||||
| subdir := des | ||||
| headers:= des.h rpc_des.h | ||||
|  | ||||
| routines:= $(destest) | ||||
| 	cbc3_enc cbc_cksm cbc_enc  cfb64enc cfb_enc  \ | ||||
| 	ecb3_enc ecb_enc  ede_enc  enc_read enc_writ \ | ||||
| 	fcrypt   ncbc_enc ofb64enc ofb_enc  pcbc_enc \ | ||||
| 	qud_cksm rand_key read_pwd rpc_enc  set_key  \ | ||||
| 	str2key  cfb64ede ofb64ede supp | ||||
| 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.pl testdes.pl doIP doPC1 doPC2 PC1 PC2 shifts.pl \ | ||||
| 	des.doc makefile.bc | ||||
|  | ||||
| tests:= destest speed | ||||
| override +gccwarn := -w | ||||
| others:= des rpw | ||||
| install:= des | ||||
|  | ||||
| include ../Rules | ||||
| endif | ||||
|  | ||||
| @@ -5,10 +5,10 @@ If your C library does not support the times(3) function, change the | ||||
| #undef TIMES in speed.c | ||||
| If it does, check the HZ value for the times(3) function. | ||||
| If your system does not define CLK_TCK it will be assumed to | ||||
| be 60. | ||||
| be 100.0. | ||||
|  | ||||
| If possible use gcc v 2.2.2 | ||||
| Turn on the maximum optimising | ||||
| If possible use gcc v 2.7.? | ||||
| Turn on the maximum optimising (normally '-O3 -fomit-frame-pointer' for gcc) | ||||
|  | ||||
| type 'make' | ||||
|  | ||||
| @@ -46,8 +46,12 @@ limitations of DOS compilers :-(. | ||||
| For Turbo C v 2.0, make sure to define MSDOS, in the relevant menu. | ||||
|  | ||||
| There is an alternative version of the D_ENCRYPT macro that can be | ||||
| enabled with the -DALT_ECB option in the makefile.  This alternative | ||||
| enabled with the -DDES_USE_PTR option in the makefile.  This alternative | ||||
| macro can make a +-%20 speed difference to the DES encryption speed, | ||||
| depending on the compiler/CPU combinations. | ||||
| It has its greatest effect on Sparc machines when using the sun compiler. | ||||
| If in doubt, try enable/disable it and running speed. | ||||
| If in doubt, try enable/disable it and running speed.  It does not | ||||
| seem to affect gcc much. | ||||
|  | ||||
| When building for glibc, ignore all of the above and just unpack into | ||||
| glibc-1.??/des and then gmake as per normal. | ||||
|   | ||||
							
								
								
									
										35
									
								
								lib/des/Imakefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								lib/des/Imakefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| # This Imakefile has not been tested for a while but it should still | ||||
| # work when placed in the correct directory in the kerberos v 4 distribution | ||||
|  | ||||
| SRCS=   cbc_cksm.c cbc_enc.c ecb_enc.c pcbc_enc.c \ | ||||
|         qud_cksm.c rand_key.c read_pwd.c set_key.c str2key.c \ | ||||
|         enc_read.c enc_writ.c fcrypt.c cfb_enc.c \ | ||||
| 	3ecb_enc.c ofb_enc.c ofb64enc.c | ||||
|  | ||||
| OBJS=   cbc_cksm.o cbc_enc.o ecb_enc.o pcbc_enc.o \ | ||||
| 	qud_cksm.o rand_key.o read_pwd.o set_key.o str2key.o \ | ||||
| 	enc_read.o enc_writ.o fcrypt.o cfb_enc.o \ | ||||
| 	3ecb_enc.o ofb_enc.o ofb64enc.o | ||||
|  | ||||
| GENERAL=COPYRIGHT FILES INSTALL Imakefile README VERSION makefile times \ | ||||
| 	vms.com KERBEROS | ||||
| DES=    des.c des.man | ||||
| TESTING=destest.c speed.c rpw.c | ||||
| LIBDES= des_crypt.man des.h des_locl.h podd.h sk.h spr.h | ||||
|  | ||||
| PERL=   des.pl testdes.pl doIP doPC1 doPC2 PC1 PC2 shifts.pl | ||||
|  | ||||
| CODE=    $(GENERAL) $(DES) $(TESTING) $(SRCS) $(LIBDES) $(PERL) | ||||
|  | ||||
| SRCDIR=$(SRCTOP)/lib/des | ||||
|  | ||||
| DBG= -O | ||||
| INCLUDE= -I$(SRCDIR) | ||||
| CC= cc | ||||
|  | ||||
| library_obj_rule() | ||||
|  | ||||
| install_library_target(des,$(OBJS),$(SRCS),) | ||||
|  | ||||
| test(destest,libdes.a,) | ||||
| test(rpw,libdes.a,) | ||||
| @@ -1,3 +1,6 @@ | ||||
|  [ This is an old file, I don't know if it is true anymore | ||||
|    but I will leave the file here - eay 21/11/95 ] | ||||
|  | ||||
| To use this library with Bones (kerberos without DES): | ||||
| 1) Get my modified Bones - eBones.  It can be found on | ||||
|    gondwana.ecr.mu.oz.au (128.250.1.63) /pub/athena/eBones-p9.tar.Z | ||||
|   | ||||
| @@ -69,7 +69,7 @@ Output Feedback Mode (OFB) (des_ofb_encrypt()) | ||||
| different from the start variable values used before with the same | ||||
| key.  The reason for this is that an identical bit stream would be | ||||
| produced each time from the same parameters.  This would be | ||||
| susceptible to a ' known plaintext' attack. | ||||
| susceptible to a 'known plaintext' attack. | ||||
|  | ||||
| Triple ECB Mode (des_3ecb_encrypt()) | ||||
| - Encrypt with key1, decrypt with key2 and encrypt with key1 again. | ||||
|   | ||||
							
								
								
									
										149
									
								
								lib/des/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								lib/des/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | ||||
| # You must select the correct terminal control system to be used to | ||||
| # turn character echo off when reading passwords.  There a 5 systems | ||||
| # SGTTY   - the old BSD system | ||||
| # TERMIO  - most system V boxes | ||||
| # TERMIOS - SGI (ala IRIX). | ||||
| # VMS     - the DEC operating system | ||||
| # MSDOS   - we all know what it is :-) | ||||
| # read_pwd.c makes a reasonable guess at what is correct. | ||||
|  | ||||
| OPTS0= -DRAND -DTERMIO #-DNOCONST | ||||
|  | ||||
| # Version 1.94 has changed the strings_to_key function so that it is | ||||
| # now compatible with MITs when the string is longer than 8 characters. | ||||
| # If you wish to keep the old version, uncomment the following line. | ||||
| # This will affect the -E/-D options on des(1). | ||||
| #OPTS1= -DOLD_STR_TO_KEY | ||||
|  | ||||
| # This #define specifies the use of an alternative D_ENCRYPT macro in | ||||
| # ecb_encrypt.  The choice of macro can make a %20 difference in the | ||||
| # speed.  Unfortunatly the choise of the best macro appears to be very | ||||
| # dependant on the compiler and the machine in question. | ||||
| # For the following combinations use the ALT_ECB option. | ||||
| # Sparc 2 (cc -O4), sun 3/260 (cc -O4) | ||||
| # For the following combinations do not use the ALT_ECB option. | ||||
| # Sparc 2 (gcc2 -O2), sun 3/260 (cc -O2), mvax2 (cc -O), MSDOS (Turbo Cv2) | ||||
| # 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 | ||||
|  | ||||
| OPTS= $(OPTS0) $(OPTS1) $(OPTS2) | ||||
|  | ||||
| #CC=cc | ||||
| #CFLAGS= -O $(OPTS) $(CFLAG) | ||||
|  | ||||
| CC=gcc | ||||
| CFLAGS= -O3 -fomit-frame-pointer $(OPTS) $(CFLAG) | ||||
|  | ||||
| LIBDIR=/usr/local/lib | ||||
| BINDIR=/usr/local/bin | ||||
| INCDIR=/usr/local/include | ||||
| MANDIR=/usr/local/man | ||||
| MAN1=1 | ||||
| MAN3=3 | ||||
| SHELL=/bin/sh | ||||
| OBJS=	cbc3_enc.o cbc_cksm.o cbc_enc.o ncbc_enc.o pcbc_enc.o qud_cksm.o \ | ||||
| 	cfb64ede.o cfb64enc.o cfb_enc.o ecb3_enc.o ecb_enc.o  ede_enc.o  \ | ||||
| 	enc_read.o enc_writ.o fcrypt.o  ofb64ede.o ofb64enc.o ofb_enc.o  \ | ||||
| 	rand_key.o read_pwd.o set_key.o rpc_enc.o  str2key.o supp.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=	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 | ||||
| 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  \ | ||||
| 	rand_key.c read_pwd.c set_key.c rpc_enc.c  str2key.c  supp.c | ||||
|  | ||||
| PERL=	des.pl testdes.pl doIP doPC1 doPC2 PC1 PC2 shifts.pl | ||||
|  | ||||
| ALL=	$(GENERAL) $(DES) $(TESTING) $(LIBDES) $(PERL) $(HEADERS) | ||||
|  | ||||
| DLIB=	libdes.a | ||||
|  | ||||
| all: $(DLIB) destest rpw des speed | ||||
|  | ||||
| test:	all | ||||
| 	./destest | ||||
|  | ||||
| $(DLIB): $(OBJS) | ||||
| 	/bin/rm -f $(DLIB) | ||||
| 	ar cr $(DLIB) $(OBJS) | ||||
| 	-if test -s /bin/ranlib; then /bin/ranlib $(DLIB); \ | ||||
| 	else if test -s /usr/bin/ranlib; then /usr/bin/ranlib $(DLIB); \ | ||||
| 	else exit 0; fi; fi | ||||
|  | ||||
| destest: destest.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o destest destest.o libdes.a | ||||
|  | ||||
| rpw: rpw.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o rpw rpw.o libdes.a | ||||
|  | ||||
| speed: speed.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o speed speed.o libdes.a | ||||
|  | ||||
| des: des.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o des des.o libdes.a | ||||
|  | ||||
| tags: | ||||
| 	ctags $(DES) $(TESTING) $(LIBDES) | ||||
|  | ||||
| tar: | ||||
| 	tar chf libdes.tar $(ALL) | ||||
|  | ||||
| shar: | ||||
| 	shar $(ALL) >libdes.shar | ||||
|  | ||||
| depend: | ||||
| 	makedepend $(LIBDES) $(DES) $(TESTING) | ||||
|  | ||||
| clean: | ||||
| 	/bin/rm -f *.o tags core rpw destest des speed $(DLIB) .nfs* *.old \ | ||||
| 	*.bak destest rpw des speed | ||||
|  | ||||
| dclean: | ||||
| 	sed -e '/^# DO NOT DELETE THIS LINE/ q' Makefile >Makefile.new | ||||
| 	mv -f Makefile.new Makefile | ||||
|  | ||||
| # Eric is probably going to choke when he next looks at this --tjh | ||||
| install: $(DLIB) des | ||||
| 	if test $(INSTALLTOP); then \ | ||||
| 	    echo SSL style install; \ | ||||
| 	    cp $(DLIB) $(INSTALLTOP)/lib; \ | ||||
| 	    if test -s /bin/ranlib; then \ | ||||
| 	        /bin/ranlib $(INSTALLTOP)/lib/$(DLIB); \ | ||||
| 	    else \ | ||||
| 		if test -s /usr/bin/ranlib; then \ | ||||
| 		/usr/bin/ranlib $(INSTALLTOP)/lib/$(DLIB); \ | ||||
| 	    fi; fi; \ | ||||
| 	    chmod 644 $(INSTALLTOP)/lib/$(DLIB); \ | ||||
| 	    cp des.h $(INSTALLTOP)/include; \ | ||||
| 	    chmod 644 $(INSTALLTOP)/include/des.h; \ | ||||
| 	    cp des $(INSTALLTOP)/bin; \ | ||||
| 	    chmod 755 $(INSTALLTOP)/bin/des; \ | ||||
| 	else \ | ||||
| 	    echo Standalone install; \ | ||||
| 	    cp $(DLIB) $(LIBDIR)/$(DLIB); \ | ||||
| 	    if test -s /bin/ranlib; then \ | ||||
| 	      /bin/ranlib $(LIBDIR)/$(DLIB); \ | ||||
| 	    else \ | ||||
| 	      if test -s /usr/bin/ranlib; then \ | ||||
| 		/usr/bin/ranlib $(LIBDIR)/$(DLIB); \ | ||||
| 	      fi; \ | ||||
| 	    fi; \ | ||||
| 	    chmod 644 $(LIBDIR)/$(DLIB); \ | ||||
| 	    cp des $(BINDIR)/des; \ | ||||
| 	    chmod 711 $(BINDIR)/des; \ | ||||
| 	    cp des_crypt.man $(MANDIR)/man$(MAN3)/des_crypt.$(MAN3); \ | ||||
| 	    chmod 644 $(MANDIR)/man$(MAN3)/des_crypt.$(MAN3); \ | ||||
| 	    cp des.man $(MANDIR)/man$(MAN1)/des.$(MAN1); \ | ||||
| 	    chmod 644 $(MANDIR)/man$(MAN1)/des.$(MAN1); \ | ||||
| 	    cp des.h $(INCDIR)/des.h; \ | ||||
| 	    chmod 644 $(INCDIR)/des.h; \ | ||||
| 	fi | ||||
| # DO NOT DELETE THIS LINE -- make depend depends on it. | ||||
							
								
								
									
										14
									
								
								lib/des/Makefile.PL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								lib/des/Makefile.PL
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| use ExtUtils::MakeMaker; | ||||
| # See lib/ExtUtils/MakeMaker.pm for details of how to influence | ||||
| # the contents of the Makefile being created. | ||||
| &writeMakefile( | ||||
| 	'potential_libs' => '',   # e.g., '-lm'  | ||||
| 	'INC' => '',     # e.g., '-I/usr/include/other'  | ||||
| 	'DISTNAME' => 'DES', | ||||
| 	'VERSION' => '0.1', | ||||
| 	'DEFINE' => '-DPERL5', | ||||
| 	'OBJECT' => 'DES.o cbc_cksm.o cbc_enc.o ecb_enc.o pcbc_enc.o \ | ||||
| 	rand_key.o set_key.o str2key.o \ | ||||
| 	enc_read.o enc_writ.o fcrypt.o cfb_enc.o \ | ||||
| 	ecb3_enc.o ofb_enc.o cbc3_enc.o', | ||||
| 	); | ||||
| @@ -30,35 +30,13 @@ LIBEXT = @LIBEXT@ | ||||
| SHLIBEXT = @SHLIBEXT@ | ||||
| LIB = $(LIBNAME).$(LIBEXT) | ||||
|  | ||||
| SOURCES = cfb_enc.c \ | ||||
|           cbc_enc.c \ | ||||
|           fcrypt.c \ | ||||
|           key_par.c \ | ||||
|           ofb_enc.c \ | ||||
|           pcbc_enc.c \ | ||||
|           qud_cksm.c \ | ||||
|           read_pwd.c \ | ||||
|           rnd_keys.c \ | ||||
|           str2key.c \ | ||||
|           cbc_cksm.c \ | ||||
|           ecb_enc.c \ | ||||
|           set_key.c | ||||
| # Generated with lorder *.o | tsort | xargs echo | ||||
|  | ||||
| OBJECTS = cfb_enc.o \ | ||||
|           cbc_enc.o \ | ||||
|           fcrypt.o \ | ||||
|           key_par.o \ | ||||
|           ofb_enc.o \ | ||||
|           pcbc_enc.o \ | ||||
|           qud_cksm.o \ | ||||
|           read_pwd.o \ | ||||
|           rnd_keys.o \ | ||||
|           str2key.o \ | ||||
|           cbc_cksm.o \ | ||||
|           ecb_enc.o \ | ||||
|           set_key.o | ||||
| LIBSRC = cbc3_enc.c cbc_enc.c cfb64ede.c cfb64enc.c cfb_enc.c ecb3_enc.c ede_enc.c fcrypt.c key_par.c ncbc_enc.c ofb64ede.c ofb64enc.c ofb_enc.c pcbc_enc.c qud_cksm.c read_pwd.c rnd_keys.c str2key.c cbc_cksm.c ecb_enc.c set_key.c | ||||
|  | ||||
| all: $(LIB) | ||||
| LIBOBJ = cbc3_enc.o cbc_enc.o cfb64ede.o cfb64enc.o cfb_enc.o ecb3_enc.o ede_enc.o fcrypt.o key_par.o ncbc_enc.o ofb64ede.o ofb64enc.o ofb_enc.o pcbc_enc.o qud_cksm.o read_pwd.o rnd_keys.o str2key.o cbc_cksm.o ecb_enc.o set_key.o | ||||
|  | ||||
| all: $(LIB) destest | ||||
|  | ||||
| Wall: | ||||
| 	make CFLAGS="-g -Wall -Wmissing-prototypes -Wmissing-declarations -D__USE_FIXED_PROTOTYPES__" | ||||
| @@ -66,16 +44,20 @@ Wall: | ||||
| .c.o: | ||||
| 	$(CC) -c $(CPPFLAGS) $(DEFS) -I../.. -I../../include -I$(srcdir) -I$(srcdir)/../../include $(CFLAGS) $(PICFLAGS) $< | ||||
|  | ||||
| destest.o: destest.c | ||||
| 	$(CC) -c $(CPPFLAGS) $(DEFS) -I../.. -I../../include -I$(srcdir) -I$(srcdir)/../../include $(CFLAGS) $< | ||||
|  | ||||
| install: all | ||||
| 	$(MKDIRHIER) $(prefix)/lib | ||||
| 	$(INSTALL_DATA) $(LIB) $(libdir) | ||||
| 	$(MKDIRHIER) $(libdir) | ||||
| 	$(INSTALL) -m 0555 $(LIB) $(libdir) | ||||
|  | ||||
| uninstall: | ||||
|  | ||||
| TAGS: $(SOURCES) | ||||
| 	etags $(SOURCES) | ||||
| TAGS: $(LIBSRC) | ||||
| 	etags $(LIBSRC) | ||||
|  | ||||
| check: | ||||
| check: ./destest | ||||
| 	./destest | ||||
|  | ||||
| clean: | ||||
| 	rm -f $(LIB) *.o *.a | ||||
| @@ -95,13 +77,16 @@ dist: $(DISTFILES) | ||||
| 	    || cp -p $$file ../`cat ../.fname`/lib; \ | ||||
| 	done | ||||
|  | ||||
| $(LIBNAME).a: $(OBJECTS) | ||||
| $(LIBNAME).a: $(LIBOBJ) | ||||
| 	rm -f $@ | ||||
| 	$(AR) cr $@ $(OBJECTS) | ||||
| 	$(AR) cr $@ $(LIBOBJ) | ||||
| 	-$(RANLIB) $@ | ||||
|  | ||||
| $(LIBNAME).$(SHLIBEXT): $(OBJECTS) | ||||
| $(LIBNAME).$(SHLIBEXT): $(LIBOBJ) | ||||
| 	rm -f $@ | ||||
| 	$(CC) $(CFLAGS) $(PICFLAGS) -shared -o $@ $(OBJECTS) | ||||
| 	$(CC) $(CFLAGS) $(PICFLAGS) -shared -o $@ $(LIBOBJ) | ||||
|  | ||||
| $(OBJECTS): ../../config.h | ||||
| destest: destest.o | ||||
| 	$(CC) $(CFLAGS) destest.o -o $@ -L. -ldes | ||||
|  | ||||
| $(LIBOBJ): ../../config.h | ||||
|   | ||||
							
								
								
									
										187
									
								
								lib/des/Makefile.ssl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								lib/des/Makefile.ssl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,187 @@ | ||||
| # | ||||
| # SSLeay/crypto/des/Makefile | ||||
| # | ||||
|  | ||||
| DIR=	des | ||||
| TOP=	../.. | ||||
| CC=	cc | ||||
| INCLUDES= | ||||
| CFLAG=-g | ||||
| INSTALLTOP=/usr/local/ssl | ||||
| MAKE=		make -f Makefile.ssl | ||||
| MAKEDEPEND=	makedepend -fMakefile.ssl | ||||
| MAKEFILE=	Makefile.ssl | ||||
|  | ||||
| CFLAGS= $(INCLUDES) $(CFLAG) | ||||
|  | ||||
| GENERAL=Makefile | ||||
| TEST=destest.c | ||||
| APPS= | ||||
|  | ||||
| LIB=$(TOP)/libcrypto.a | ||||
| LIBSRC=	cbc3_enc.c cbc_cksm.c cbc_enc.c  cfb64enc.c cfb_enc.c  \ | ||||
| 	ecb3_enc.c ecb_enc.c  ede_enc.c  enc_read.c enc_writ.c \ | ||||
| 	fcrypt.c   ncbc_enc.c ofb64enc.c ofb_enc.c  pcbc_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 | ||||
|  | ||||
| SRC= $(LIBSRC) | ||||
|  | ||||
| EXHEADER= des.h | ||||
| HEADER=	des_locl.h rpc_des.h podd.h sk.h spr.h version.h $(EXHEADER) | ||||
|  | ||||
| ALL=    $(GENERAL) $(SRC) $(HEADER) | ||||
|  | ||||
| top: | ||||
| 	(cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all) | ||||
|  | ||||
| all:	lib | ||||
|  | ||||
| lib:	$(LIBOBJ) | ||||
| 	ar r $(LIB) $(LIBOBJ) | ||||
| 	$(TOP)/util/ranlib.sh $(LIB) | ||||
| 	@touch lib | ||||
|  | ||||
| links: | ||||
| 	/bin/rm -f Makefile | ||||
| 	ln -s Makefile.ssl Makefile | ||||
| 	/bin/rm -f des.doc | ||||
| 	ln -s ../../doc/des.doc . | ||||
| 	$(TOP)/util/mklink.sh ../../include $(EXHEADER) | ||||
| 	$(TOP)/util/mklink.sh ../../test $(TEST) | ||||
| 	$(TOP)/util/mklink.sh ../../apps $(APPS) | ||||
|  | ||||
| install: installs | ||||
|  | ||||
| installs: | ||||
| 	@for i in $(EXHEADER) ; \ | ||||
| 	do  \ | ||||
| 	(cp $$i $(INSTALLTOP)/include/$$i; \ | ||||
| 	chmod 644 $(INSTALLTOP)/include/$$i ) \ | ||||
| 	done; | ||||
|  | ||||
| tags: | ||||
| 	ctags $(SRC) | ||||
|  | ||||
| tests: | ||||
|  | ||||
| lint: | ||||
| 	lint -DLINT -DPROTO $(INCLUDES) $(SRC)>fluff | ||||
|  | ||||
| depend: | ||||
| 	$(MAKEDEPEND) $(INCLUDES) $(PROGS) $(LIBSRC) | ||||
|  | ||||
| dclean: | ||||
| 	sed -e '/^# DO NOT DELETE THIS LINE/ q' $(MAKEFILE) >Makefile.new | ||||
| 	mv -f Makefile.new $(MAKEFILE) | ||||
|  | ||||
| clean: | ||||
| 	/bin/rm -f *.o *.obj lib tags core .nfs* *.old *.bak fluff | ||||
|  | ||||
| errors: | ||||
|  | ||||
| # DO NOT DELETE THIS LINE -- make depend depends on it. | ||||
|  | ||||
| cbc3_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| cbc3_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| cbc3_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| cbc3_enc.o: /usr/include/sys/unistd.h des.h | ||||
| cbc_cksm.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| cbc_cksm.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| cbc_cksm.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| cbc_cksm.o: /usr/include/sys/unistd.h des.h | ||||
| cbc_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| cbc_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| cbc_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| cbc_enc.o: /usr/include/sys/unistd.h des.h | ||||
| cfb64enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| cfb64enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| cfb64enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| cfb64enc.o: /usr/include/sys/unistd.h des.h | ||||
| cfb_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| cfb_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| cfb_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| cfb_enc.o: /usr/include/sys/unistd.h des.h | ||||
| ecb3_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ecb3_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| ecb3_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| ecb3_enc.o: /usr/include/sys/unistd.h des.h | ||||
| ecb_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ecb_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| ecb_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| ecb_enc.o: /usr/include/sys/unistd.h des.h spr.h | ||||
| ede_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ede_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| ede_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| ede_enc.o: /usr/include/sys/unistd.h des.h | ||||
| enc_read.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| enc_read.o: /usr/include/errno.h /usr/include/sys/errno.h des_locl.h | ||||
| enc_read.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| enc_read.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| enc_read.o: /usr/include/sys/unistd.h des.h | ||||
| enc_writ.o: /usr/include/errno.h /usr/include/sys/errno.h /usr/include/time.h | ||||
| enc_writ.o: /usr/include/sys/feature_tests.h des_locl.h /usr/include/stdio.h | ||||
| enc_writ.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| enc_writ.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| enc_writ.o: /usr/include/sys/unistd.h des.h | ||||
| fcrypt.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ncbc_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ncbc_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| ncbc_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| ncbc_enc.o: /usr/include/sys/unistd.h des.h | ||||
| ofb64enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ofb64enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| ofb64enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| ofb64enc.o: /usr/include/sys/unistd.h des.h | ||||
| ofb_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ofb_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| ofb_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| ofb_enc.o: /usr/include/sys/unistd.h des.h | ||||
| pcbc_enc.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| pcbc_enc.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| pcbc_enc.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| pcbc_enc.o: /usr/include/sys/unistd.h des.h | ||||
| qud_cksm.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| qud_cksm.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| qud_cksm.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| qud_cksm.o: /usr/include/sys/unistd.h des.h | ||||
| rand_key.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| rand_key.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| rand_key.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| rand_key.o: /usr/include/sys/unistd.h des.h /usr/include/time.h | ||||
| read_pwd.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| read_pwd.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| read_pwd.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| read_pwd.o: /usr/include/sys/unistd.h des.h /usr/include/signal.h | ||||
| read_pwd.o: /usr/include/sys/signal.h /usr/include/string.h | ||||
| read_pwd.o: /usr/include/setjmp.h /usr/include/sys/ioctl.h | ||||
| rpc_enc.o: rpc_des.h des_locl.h /usr/include/stdio.h | ||||
| rpc_enc.o: /usr/include/sys/feature_tests.h /usr/include/stdlib.h | ||||
| rpc_enc.o: /usr/include/unistd.h /usr/include/sys/types.h | ||||
| rpc_enc.o: /usr/include/sys/machtypes.h /usr/include/sys/unistd.h des.h | ||||
| rpc_enc.o: version.h | ||||
| set_key.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| set_key.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| set_key.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| set_key.o: /usr/include/sys/unistd.h des.h podd.h sk.h | ||||
| str2key.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| str2key.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| str2key.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| str2key.o: /usr/include/sys/unistd.h des.h | ||||
| cfb64ede.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| cfb64ede.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| cfb64ede.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| cfb64ede.o: /usr/include/sys/unistd.h des.h | ||||
| ofb64ede.o: des_locl.h /usr/include/stdio.h /usr/include/sys/feature_tests.h | ||||
| ofb64ede.o: /usr/include/stdlib.h /usr/include/unistd.h | ||||
| ofb64ede.o: /usr/include/sys/types.h /usr/include/sys/machtypes.h | ||||
| ofb64ede.o: /usr/include/sys/unistd.h des.h | ||||
| supp.o: /usr/include/stdio.h /usr/include/sys/feature_tests.h des_locl.h | ||||
| supp.o: /usr/include/stdlib.h /usr/include/unistd.h /usr/include/sys/types.h | ||||
| supp.o: /usr/include/sys/machtypes.h /usr/include/sys/unistd.h des.h | ||||
							
								
								
									
										149
									
								
								lib/des/Makefile.uni
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								lib/des/Makefile.uni
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,149 @@ | ||||
| # You must select the correct terminal control system to be used to | ||||
| # turn character echo off when reading passwords.  There a 5 systems | ||||
| # SGTTY   - the old BSD system | ||||
| # TERMIO  - most system V boxes | ||||
| # TERMIOS - SGI (ala IRIX). | ||||
| # VMS     - the DEC operating system | ||||
| # MSDOS   - we all know what it is :-) | ||||
| # read_pwd.c makes a reasonable guess at what is correct. | ||||
|  | ||||
| OPTS0= -DRAND -DTERMIO #-DNOCONST | ||||
|  | ||||
| # Version 1.94 has changed the strings_to_key function so that it is | ||||
| # now compatible with MITs when the string is longer than 8 characters. | ||||
| # If you wish to keep the old version, uncomment the following line. | ||||
| # This will affect the -E/-D options on des(1). | ||||
| #OPTS1= -DOLD_STR_TO_KEY | ||||
|  | ||||
| # This #define specifies the use of an alternative D_ENCRYPT macro in | ||||
| # ecb_encrypt.  The choice of macro can make a %20 difference in the | ||||
| # speed.  Unfortunatly the choise of the best macro appears to be very | ||||
| # dependant on the compiler and the machine in question. | ||||
| # For the following combinations use the ALT_ECB option. | ||||
| # Sparc 2 (cc -O4), sun 3/260 (cc -O4) | ||||
| # For the following combinations do not use the ALT_ECB option. | ||||
| # Sparc 2 (gcc2 -O2), sun 3/260 (cc -O2), mvax2 (cc -O), MSDOS (Turbo Cv2) | ||||
| # 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 | ||||
|  | ||||
| OPTS= $(OPTS0) $(OPTS1) $(OPTS2) | ||||
|  | ||||
| #CC=cc | ||||
| #CFLAGS= -O $(OPTS) $(CFLAG) | ||||
|  | ||||
| CC=gcc | ||||
| CFLAGS= -O3 -fomit-frame-pointer $(OPTS) $(CFLAG) | ||||
|  | ||||
| LIBDIR=/usr/local/lib | ||||
| BINDIR=/usr/local/bin | ||||
| INCDIR=/usr/local/include | ||||
| MANDIR=/usr/local/man | ||||
| MAN1=1 | ||||
| MAN3=3 | ||||
| SHELL=/bin/sh | ||||
| OBJS=	cbc3_enc.o cbc_cksm.o cbc_enc.o ncbc_enc.o pcbc_enc.o qud_cksm.o \ | ||||
| 	cfb64ede.o cfb64enc.o cfb_enc.o ecb3_enc.o ecb_enc.o  ede_enc.o  \ | ||||
| 	enc_read.o enc_writ.o fcrypt.o  ofb64ede.o ofb64enc.o ofb_enc.o  \ | ||||
| 	rand_key.o read_pwd.o set_key.o rpc_enc.o  str2key.o supp.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=	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 | ||||
| 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  \ | ||||
| 	rand_key.c read_pwd.c set_key.c rpc_enc.c  str2key.c  supp.c | ||||
|  | ||||
| PERL=	des.pl testdes.pl doIP doPC1 doPC2 PC1 PC2 shifts.pl | ||||
|  | ||||
| ALL=	$(GENERAL) $(DES) $(TESTING) $(LIBDES) $(PERL) $(HEADERS) | ||||
|  | ||||
| DLIB=	libdes.a | ||||
|  | ||||
| all: $(DLIB) destest rpw des speed | ||||
|  | ||||
| test:	all | ||||
| 	./destest | ||||
|  | ||||
| $(DLIB): $(OBJS) | ||||
| 	/bin/rm -f $(DLIB) | ||||
| 	ar cr $(DLIB) $(OBJS) | ||||
| 	-if test -s /bin/ranlib; then /bin/ranlib $(DLIB); \ | ||||
| 	else if test -s /usr/bin/ranlib; then /usr/bin/ranlib $(DLIB); \ | ||||
| 	else exit 0; fi; fi | ||||
|  | ||||
| destest: destest.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o destest destest.o libdes.a | ||||
|  | ||||
| rpw: rpw.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o rpw rpw.o libdes.a | ||||
|  | ||||
| speed: speed.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o speed speed.o libdes.a | ||||
|  | ||||
| des: des.o libdes.a | ||||
| 	$(CC) $(CFLAGS) -o des des.o libdes.a | ||||
|  | ||||
| tags: | ||||
| 	ctags $(DES) $(TESTING) $(LIBDES) | ||||
|  | ||||
| tar: | ||||
| 	tar chf libdes.tar $(ALL) | ||||
|  | ||||
| shar: | ||||
| 	shar $(ALL) >libdes.shar | ||||
|  | ||||
| depend: | ||||
| 	makedepend $(LIBDES) $(DES) $(TESTING) | ||||
|  | ||||
| clean: | ||||
| 	/bin/rm -f *.o tags core rpw destest des speed $(DLIB) .nfs* *.old \ | ||||
| 	*.bak destest rpw des speed | ||||
|  | ||||
| dclean: | ||||
| 	sed -e '/^# DO NOT DELETE THIS LINE/ q' Makefile >Makefile.new | ||||
| 	mv -f Makefile.new Makefile | ||||
|  | ||||
| # Eric is probably going to choke when he next looks at this --tjh | ||||
| install: $(DLIB) des | ||||
| 	if test $(INSTALLTOP); then \ | ||||
| 	    echo SSL style install; \ | ||||
| 	    cp $(DLIB) $(INSTALLTOP)/lib; \ | ||||
| 	    if test -s /bin/ranlib; then \ | ||||
| 	        /bin/ranlib $(INSTALLTOP)/lib/$(DLIB); \ | ||||
| 	    else \ | ||||
| 		if test -s /usr/bin/ranlib; then \ | ||||
| 		/usr/bin/ranlib $(INSTALLTOP)/lib/$(DLIB); \ | ||||
| 	    fi; fi; \ | ||||
| 	    chmod 644 $(INSTALLTOP)/lib/$(DLIB); \ | ||||
| 	    cp des.h $(INSTALLTOP)/include; \ | ||||
| 	    chmod 644 $(INSTALLTOP)/include/des.h; \ | ||||
| 	    cp des $(INSTALLTOP)/bin; \ | ||||
| 	    chmod 755 $(INSTALLTOP)/bin/des; \ | ||||
| 	else \ | ||||
| 	    echo Standalone install; \ | ||||
| 	    cp $(DLIB) $(LIBDIR)/$(DLIB); \ | ||||
| 	    if test -s /bin/ranlib; then \ | ||||
| 	      /bin/ranlib $(LIBDIR)/$(DLIB); \ | ||||
| 	    else \ | ||||
| 	      if test -s /usr/bin/ranlib; then \ | ||||
| 		/usr/bin/ranlib $(LIBDIR)/$(DLIB); \ | ||||
| 	      fi; \ | ||||
| 	    fi; \ | ||||
| 	    chmod 644 $(LIBDIR)/$(DLIB); \ | ||||
| 	    cp des $(BINDIR)/des; \ | ||||
| 	    chmod 711 $(BINDIR)/des; \ | ||||
| 	    cp des_crypt.man $(MANDIR)/man$(MAN3)/des_crypt.$(MAN3); \ | ||||
| 	    chmod 644 $(MANDIR)/man$(MAN3)/des_crypt.$(MAN3); \ | ||||
| 	    cp des.man $(MANDIR)/man$(MAN1)/des.$(MAN1); \ | ||||
| 	    chmod 644 $(MANDIR)/man$(MAN1)/des.$(MAN1); \ | ||||
| 	    cp des.h $(INCDIR)/des.h; \ | ||||
| 	    chmod 644 $(INCDIR)/des.h; \ | ||||
| 	fi | ||||
| # DO NOT DELETE THIS LINE -- make depend depends on it. | ||||
| @@ -1,35 +1,26 @@ | ||||
|  | ||||
| 			libdes, Version 3.00 93/10/07 | ||||
| 		libdes, Version 3.21 21/11/95 | ||||
|  | ||||
| 		Copyright (c) 1993, Eric Young | ||||
| 		Copyright (c) 1995, Eric Young | ||||
| 			  All rights reserved. | ||||
|  | ||||
|     This program is free software; you can redistribute it and/or modify | ||||
|     it under the terms of either: | ||||
|     it under the terms specified in COPYRIGHT. | ||||
|      | ||||
| 	a) the GNU General Public License as published by the Free | ||||
| 	Software Foundation; either version 1, or (at your option) any | ||||
| 	later version, or | ||||
| -- | ||||
| The primary ftp site for this library is | ||||
| ftp://ftp.psy.uq.oz.au/pub/Crypto/DES/libdes-x.xx.tar.gz | ||||
| libdes is now also shipped with SSLeay.  Primary ftp site of | ||||
| ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL/SSLeay-x.xx.tar.gz | ||||
|  | ||||
| 	b) the "Artistic License" which comes with this Kit. | ||||
| The best way to build this library is to build it as part of SSLeay. | ||||
|  | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See either | ||||
|     the GNU General Public License or the Artistic License for more details. | ||||
|  | ||||
|     You should have received a copy of the Artistic License with this | ||||
|     Kit, in the file named "Artistic".  If not, I'll be glad to provide one. | ||||
|  | ||||
|     You should also have received a copy of the GNU General Public License | ||||
|     along with this program; if not, write to the Free Software | ||||
|     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||||
| --- | ||||
| This kit builds a DES encryption library and a DES encryption program. | ||||
| It suports ecb, cbc, ofb, cfb, triple ecb, triple cbc and MIT's pcbc | ||||
| encryption modes and also has a fast implementation of crypt(3). | ||||
| It supports ecb, cbc, ofb, cfb, triple ecb, triple cbc, triple ofb, | ||||
| triple cfb, and MIT's pcbc encryption modes and also has a fast | ||||
| implementation of crypt(3). | ||||
| It contains support routines to read keys from a terminal, | ||||
| generate a random key, generate a key from an arbitary length string, | ||||
| generate a random key, generate a key from an arbitrary length string, | ||||
| read/write encrypted data from/to a file descriptor. | ||||
|  | ||||
| The implementation was written so as to conform with the manual entry | ||||
| @@ -51,6 +42,6 @@ I believe these routines are close to the fastest and most portable DES | ||||
| routines that use small lookup tables (4.5k) that are publicly available. | ||||
| The fcrypt routine is faster than ufc's fcrypt (when compiling with | ||||
| gcc2 -O2) on the sparc 2 (1410 vs 1270) but is not so good on other machines | ||||
| (on a sun3/260 168 vs 336). | ||||
| (on a sun3/260 168 vs 336).  It is a function of CPU on chip cache size. | ||||
|  | ||||
| Eric Young (eay@psych.psy.uq.oz.au) | ||||
| Eric Young (eay@mincom.oz.au or eay@psych.psy.uq.oz.au) | ||||
|   | ||||
							
								
								
									
										139
									
								
								lib/des/VERSION
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								lib/des/VERSION
									
									
									
									
									
								
							| @@ -1,13 +1,140 @@ | ||||
| Release apon comp.sources.misc | ||||
| Version 3.21 22/11/95 | ||||
| 	After some emailing back and forth with  | ||||
| 	Colin Plumb <colin@nyx10.cs.du.edu>, I've tweaked a few things | ||||
| 	and in a future version I will probably put in some of the | ||||
| 	optimisation he suggested for use with the DES_USE_PTR option. | ||||
| 	Extra routines from Mark Murray <mark@grondar.za> for use in | ||||
| 	freeBSD.  They mostly involve random number generation for use | ||||
| 	with kerberos.  They involve evil machine specific system calls | ||||
| 	etc so I would normally suggest pushing this stuff into the | ||||
| 	application and/or using RAND_seed()/RAND_bytes() if you are | ||||
| 	using this DES library as part of SSLeay. | ||||
| 	Redone the read_pw() function so that it is cleaner and | ||||
| 	supports termios, thanks to Sameer Parekh <sameer@c2.org> | ||||
| 	for the initial patches for this. | ||||
| 	Renamed 3ecb_encrypt() to ecb3_encrypt().  This has been | ||||
| 	 done just to make things more consistent. | ||||
| 	I have also now added triple DES versions of cfb and ofb. | ||||
|  | ||||
| Version 3.20 | ||||
| 	Damn, Damn, Damn, as pointed out by Mike_Spreitzer.PARC@xerox.com, | ||||
| 	my des_random_seed() function was only copying 4 bytes of the | ||||
| 	passed seed into the init structure.  It is now fixed to copy 8. | ||||
| 	My own suggestion is to used something like MD5 :-) | ||||
|  | ||||
| Version 3.19  | ||||
| 	While looking at my code one day, I though, why do I keep on | ||||
| 	calling des_encrypt(in,out,ks,enc) when every function that | ||||
| 	calls it has in and out the same.  So I dropped the 'out' | ||||
| 	parameter, people should not be using this function. | ||||
|  | ||||
| Version 3.18 30/08/95 | ||||
| 	Fixed a few bit with the distribution and the filenames. | ||||
| 	3.17 had been munged via a move to DOS and back again. | ||||
| 	NO CODE CHANGES | ||||
|  | ||||
| Version 3.17 14/07/95 | ||||
| 	Fixed ede3 cbc which I had broken in 3.16.  I have also | ||||
| 	removed some unneeded variables in 7-8 of the routines. | ||||
|  | ||||
| Version 3.16 26/06/95 | ||||
| 	Added des_encrypt2() which does not use IP/FP, used by triple | ||||
| 	des routines.  Tweaked things a bit elsewhere. %13 speedup on | ||||
| 	sparc and %6 on a R4400 for ede3 cbc mode. | ||||
|  | ||||
| Version 3.15 06/06/95 | ||||
| 	Added des_ncbc_encrypt(), it is des_cbc mode except that it is | ||||
| 	'normal' and copies the new iv value back over the top of the | ||||
| 	passed parameter. | ||||
| 	CHANGED des_ede3_cbc_encrypt() so that it too now overwrites | ||||
| 	the iv.  THIS WILL BREAK EXISTING CODE, but since this function | ||||
| 	only new, I feel I can change it, not so with des_cbc_encrypt :-(. | ||||
| 	I need to update the documentation. | ||||
|  | ||||
| Version 3.14 31/05/95 | ||||
| 	New release upon the world, as part of my SSL implementation. | ||||
| 	New copyright and usage stuff.  Basically free for all to use | ||||
| 	as long as you say it came from me :-) | ||||
|  | ||||
| Version 3.13 31/05/95 | ||||
| 	A fix in speed.c, if HZ is not defined, I set it to 100.0 | ||||
| 	which is reasonable for most unixes except SunOS 4.x. | ||||
| 	I now have a #ifdef sun but timing for SunOS 4.x looked very | ||||
| 	good :-(.  At my last job where I used SunOS 4.x, it was | ||||
| 	defined to be 60.0 (look at the old INSTALL documentation), at | ||||
| 	the last release had it changed to 100.0 since I now work with | ||||
| 	Solaris2 and SVR4 boxes. | ||||
| 	Thanks to  Rory Chisholm <rchishol@math.ethz.ch> for pointing this | ||||
| 	one out. | ||||
|  | ||||
| Version 3.12 08/05/95 | ||||
| 	As pointed out by The Crypt Keeper <tck@bend.UCSD.EDU>, | ||||
| 	my D_ENCRYPT macro in crypt() had an un-necessary variable. | ||||
| 	It has been removed. | ||||
|  | ||||
| Version 3.11 03/05/95 | ||||
| 	Added des_ede3_cbc_encrypt() which is cbc mode des with 3 keys | ||||
| 	and one iv.  It is a standard and I needed it for my SSL code. | ||||
| 	It makes more sense to use this for triple DES than | ||||
| 	3cbc_encrypt().  I have also added (or should I say tested :-) | ||||
| 	cfb64_encrypt() which is cfb64 but it will encrypt a partial | ||||
| 	number of bytes - 3 bytes in 3 bytes out.  Again this is for | ||||
| 	my SSL library, as a form of encryption to use with SSL | ||||
| 	telnet. | ||||
|  | ||||
| Version 3.10 22/03/95 | ||||
| 	Fixed a bug in 3cbc_encrypt() :-(.  When making repeated calls | ||||
| 	to cbc3_encrypt, the 2 iv values that were being returned to | ||||
| 	be used in the next call were reversed :-(. | ||||
| 	Many thanks to Bill Wade <wade@Stoner.COM> for pointing out | ||||
| 	this error. | ||||
|  | ||||
| Version 3.09 01/02/95 | ||||
| 	Fixed des_random_key to far more random, it was rather feeble | ||||
| 	with regards to picking the initial seed.  The problem was | ||||
| 	pointed out by Olaf Kirch <okir@monad.swb.de>. | ||||
|  | ||||
| Version 3.08 14/12/94 | ||||
| 	Added Makefile.PL so libdes can be built into perl5. | ||||
| 	Changed des_locl.h so RAND is always defined. | ||||
|  | ||||
| Version 3.07 05/12/94 | ||||
| 	Added GNUmake and stuff so the library can be build with | ||||
| 	glibc. | ||||
|  | ||||
| Version 3.06 30/08/94 | ||||
| 	Added rpc_enc.c which contains _des_crypt.  This is for use in | ||||
| 	secure_rpc v 4.0 | ||||
| 	Finally fixed the cfb_enc problems. | ||||
| 	Fixed a few parameter parsing bugs in des (-3 and -b), thanks | ||||
| 	to Rob McMillan <R.McMillan@its.gu.edu.au> | ||||
|  | ||||
| Version 3.05 21/04/94 | ||||
| 	for unsigned long l; gcc does not produce ((l>>34) == 0) | ||||
| 	This causes bugs in cfb_enc. | ||||
| 	Thanks to Hadmut Danisch <danisch@ira.uka.de> | ||||
|  | ||||
| Version 3.04 20/04/94 | ||||
| 	Added a version number to des.c and libdes.a | ||||
|  | ||||
| Version 3.03 12/01/94 | ||||
| 	Fixed a bug in non zero iv in 3cbc_enc. | ||||
|  | ||||
| Version 3.02 29/10/93 | ||||
| 	I now work in a place where there are 6+ architectures and 14+ | ||||
| 	OS versions :-). | ||||
| 	Fixed TERMIO definition so the most sys V boxes will work :-) | ||||
|  | ||||
| Release upon comp.sources.misc | ||||
| Version 3.01 08/10/93 | ||||
| 	Added des_3cbc_encrypt() | ||||
|  | ||||
| Version 3.00 07/10/93 | ||||
| 	Fixed up documentation. | ||||
| 	quad_cksum definitly compatable with MIT's now. | ||||
| 	quad_cksum definitely compatible with MIT's now. | ||||
|  | ||||
| Version 2.30 24/08/93 | ||||
| 	Tripple DES now defaults to tripple cbc but can do tripple ecb | ||||
| 	Triple DES now defaults to triple cbc but can do triple ecb | ||||
| 	 with the -b flag. | ||||
| 	Fixed some MSDOS uuen/uudecoding problems, thanks to | ||||
| 	Added prototypes. | ||||
| @@ -19,13 +146,13 @@ Version 2.22 29/06/93 | ||||
| Version 2.21 03/06/93 | ||||
| 	des(1) with no arguments gives quite a bit of help. | ||||
| 	Added -c (generate ckecksum) flag to des(1). | ||||
| 	Added -3 (tripple DES) flag to des(1). | ||||
| 	Added -3 (triple DES) flag to des(1). | ||||
| 	Added cfb and ofb routines to the library. | ||||
|  | ||||
| Version 2.20 11/03/93 | ||||
| 	Added -u (uuencode) flag to des(1). | ||||
| 	I have been playing with byte order in quad_cksum to make it | ||||
| 	 compatible with MIT's version.  All I can say is aviod this | ||||
| 	 compatible with MIT's version.  All I can say is avid this | ||||
| 	 function if possible since MIT's output is endian dependent. | ||||
|  | ||||
| Version 2.12 14/10/92 | ||||
| @@ -158,7 +285,7 @@ Version 1.51 07/06/1991 eay | ||||
| 	Fixed bug in quad_cksum.c (thanks to hughes@logos.ucs.indiana.edu) | ||||
|  | ||||
| Version 1.50 28/05/1991 eay | ||||
| 	Optimized the code a bit more for the sparc.  I have improved the | ||||
| 	Optimised the code a bit more for the sparc.  I have improved the | ||||
| 	speed of the inner des_encrypt by speeding up the initial and | ||||
| 	final permutations. | ||||
|  | ||||
|   | ||||
							
								
								
									
										88
									
								
								lib/des/cbc3_enc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								lib/des/cbc3_enc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| /* lib/des/cbc3_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* HAS BUGS? DON'T USE */ | ||||
| void des_3cbc_encrypt(input, output, length, ks1, ks2, iv1, iv2, encrypt) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| des_key_schedule ks1; | ||||
| des_key_schedule ks2; | ||||
| des_cblock (*iv1); | ||||
| des_cblock (*iv2); | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	int off=(length-1)/8; | ||||
| 	long l8=((length+7)/8)*8; | ||||
| 	des_cblock niv1,niv2; | ||||
|  | ||||
| 	if (encrypt == DES_ENCRYPT) | ||||
| 		{ | ||||
| 		des_cbc_encrypt(input,output,length,ks1,iv1,encrypt); | ||||
| 		if (length >= sizeof(des_cblock)) | ||||
| 			memcpy(niv1,output[off],sizeof(des_cblock)); | ||||
| 		des_cbc_encrypt(output,output,l8,ks2,iv1,!encrypt); | ||||
| 		des_cbc_encrypt(output,output,l8,ks1,iv2, encrypt); | ||||
| 		if (length >= sizeof(des_cblock)) | ||||
| 			memcpy(niv2,output[off],sizeof(des_cblock)); | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		if (length >= sizeof(des_cblock)) | ||||
| 			memcpy(niv2,input[off],sizeof(des_cblock)); | ||||
| 		des_cbc_encrypt(input,output,l8,ks1,iv2,encrypt); | ||||
| 		des_cbc_encrypt(output,output,l8,ks2,iv1,!encrypt); | ||||
| 		if (length >= sizeof(des_cblock)) | ||||
| 			memcpy(niv1,output[off],sizeof(des_cblock)); | ||||
| 		des_cbc_encrypt(output,output,length,ks1,iv1, encrypt); | ||||
| 		} | ||||
| 	memcpy(*iv1,niv1,sizeof(des_cblock)); | ||||
| 	memcpy(*iv2,niv2,sizeof(des_cblock)); | ||||
| 	} | ||||
|  | ||||
| @@ -1,45 +1,92 @@ | ||||
| /* cbc_cksm.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/cbc_cksm.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| u_int32_t des_cbc_cksum(des_cblock (*input), des_cblock (*output), long int length, struct des_ks_struct *schedule, des_cblock (*ivec)) | ||||
| { | ||||
|   register u_int32_t tout0,tout1,tin0,tin1; | ||||
|   register long l=length; | ||||
|   u_int32_t tin[2],tout[2]; | ||||
|   unsigned char *in,*out,*iv; | ||||
|  | ||||
|   in=(unsigned char *)input; | ||||
|   out=(unsigned char *)output; | ||||
|   iv=(unsigned char *)ivec; | ||||
|  | ||||
|   c2l(iv,tout0); | ||||
|   c2l(iv,tout1); | ||||
|   for (; l>0; l-=8) | ||||
|     { | ||||
|       if (l >= 8) | ||||
| unsigned long des_cbc_cksum(input, output, length, schedule, ivec) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| des_key_schedule schedule; | ||||
| des_cblock (*ivec); | ||||
| 	{ | ||||
| 	  c2l(in,tin0); | ||||
| 	  c2l(in,tin1); | ||||
| 	} | ||||
|       else | ||||
| 	c2ln(in,tin0,tin1,l); | ||||
| 	register unsigned long tout0,tout1,tin0,tin1; | ||||
| 	register long l=length; | ||||
| 	unsigned long tin[2]; | ||||
| 	unsigned char *in,*out,*iv; | ||||
|  | ||||
|       tin0^=tout0; | ||||
|       tin1^=tout1; | ||||
|       tin[0]=tin0; | ||||
|       tin[1]=tin1; | ||||
|       des_encrypt(tin,tout, | ||||
| 		  schedule,DES_ENCRYPT); | ||||
|       /* fix 15/10/91 eay - thanks to keithr@sco.COM */ | ||||
|       tout0=tout[0]; | ||||
|       tout1=tout[1]; | ||||
|     } | ||||
|   if (out != NULL) | ||||
|     { | ||||
|       l2c(tout0,out); | ||||
|       l2c(tout1,out); | ||||
|     } | ||||
|   tout0=tin0=tin1=tin[0]=tin[1]=tout[0]=tout[1]=0; | ||||
|   return(tout1); | ||||
| } | ||||
| 	in=(unsigned char *)input; | ||||
| 	out=(unsigned char *)output; | ||||
| 	iv=(unsigned char *)ivec; | ||||
|  | ||||
| 	c2l(iv,tout0); | ||||
| 	c2l(iv,tout1); | ||||
| 	for (; l>0; l-=8) | ||||
| 		{ | ||||
| 		if (l >= 8) | ||||
| 			{ | ||||
| 			c2l(in,tin0); | ||||
| 			c2l(in,tin1); | ||||
| 			} | ||||
| 		else | ||||
| 			c2ln(in,tin0,tin1,l); | ||||
| 			 | ||||
| 		tin0^=tout0; tin[0]=tin0; | ||||
| 		tin1^=tout1; tin[1]=tin1; | ||||
| 		des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); | ||||
| 		/* fix 15/10/91 eay - thanks to keithr@sco.COM */ | ||||
| 		tout0=tin[0]; | ||||
| 		tout1=tin[1]; | ||||
| 		} | ||||
| 	if (out != NULL) | ||||
| 		{ | ||||
| 		l2c(tout0,out); | ||||
| 		l2c(tout1,out); | ||||
| 		} | ||||
| 	tout0=tin0=tin1=tin[0]=tin[1]=0; | ||||
| 	return(tout1); | ||||
| 	} | ||||
|   | ||||
| @@ -1,72 +1,114 @@ | ||||
| /* cbc_enc.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/cbc_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| int des_cbc_encrypt(des_cblock (*input), des_cblock (*output), long int length, struct des_ks_struct *schedule, des_cblock (*ivec), int encrypt) | ||||
| { | ||||
|   register u_int32_t tin0,tin1; | ||||
|   register u_int32_t tout0,tout1,xor0,xor1; | ||||
|   register unsigned char *in,*out; | ||||
|   register long l=length; | ||||
|   u_int32_t tout[2],tin[2]; | ||||
|   unsigned char *iv; | ||||
|  | ||||
|   in=(unsigned char *)input; | ||||
|   out=(unsigned char *)output; | ||||
|   iv=(unsigned char *)ivec; | ||||
|  | ||||
|   if (encrypt) | ||||
|     { | ||||
|       c2l(iv,tout0); | ||||
|       c2l(iv,tout1); | ||||
|       for (; l>0; l-=8) | ||||
| void des_cbc_encrypt(input, output, length, schedule, ivec, encrypt) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| des_key_schedule schedule; | ||||
| des_cblock (*ivec); | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	  if (l >= 8) | ||||
| 	    { | ||||
| 	      c2l(in,tin0); | ||||
| 	      c2l(in,tin1); | ||||
| 	    } | ||||
| 	  else | ||||
| 	    c2ln(in,tin0,tin1,l); | ||||
| 	  tin0^=tout0; | ||||
| 	  tin1^=tout1; | ||||
| 	  tin[0]=tin0; | ||||
| 	  tin[1]=tin1; | ||||
| 	  des_encrypt(tin,tout, | ||||
| 		      schedule,encrypt); | ||||
| 	  tout0=tout[0]; | ||||
| 	  tout1=tout[1]; | ||||
| 	  l2c(tout0,out); | ||||
| 	  l2c(tout1,out); | ||||
| 	} | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       c2l(iv,xor0); | ||||
|       c2l(iv,xor1); | ||||
|       for (; l>0; l-=8) | ||||
| 	{ | ||||
| 	  c2l(in,tin0); | ||||
| 	  c2l(in,tin1); | ||||
| 	  tin[0]=tin0; | ||||
| 	  tin[1]=tin1; | ||||
| 	  des_encrypt(tin,tout, | ||||
| 		      schedule,encrypt); | ||||
| 	  tout0=tout[0]^xor0; | ||||
| 	  tout1=tout[1]^xor1; | ||||
| 	  if (l >= 8) | ||||
| 	    { | ||||
| 	      l2c(tout0,out); | ||||
| 	      l2c(tout1,out); | ||||
| 	    } | ||||
| 	  else | ||||
| 	    l2cn(tout0,tout1,out,l); | ||||
| 	  xor0=tin0; | ||||
| 	  xor1=tin1; | ||||
| 	} | ||||
|     } | ||||
|   tin0=tin1=tout0=tout1=xor0=xor1=0; | ||||
|   tin[0]=tin[1]=tout[0]=tout[1]=0; | ||||
|   return(0); | ||||
| } | ||||
| 	register unsigned long tin0,tin1; | ||||
| 	register unsigned long tout0,tout1,xor0,xor1; | ||||
| 	register unsigned char *in,*out; | ||||
| 	register long l=length; | ||||
| 	unsigned long tin[2]; | ||||
| 	unsigned char *iv; | ||||
|  | ||||
| 	in=(unsigned char *)input; | ||||
| 	out=(unsigned char *)output; | ||||
| 	iv=(unsigned char *)ivec; | ||||
|  | ||||
| 	if (encrypt) | ||||
| 		{ | ||||
| 		c2l(iv,tout0); | ||||
| 		c2l(iv,tout1); | ||||
| 		for (; l>0; l-=8) | ||||
| 			{ | ||||
| 			if (l >= 8) | ||||
| 				{ | ||||
| 				c2l(in,tin0); | ||||
| 				c2l(in,tin1); | ||||
| 				} | ||||
| 			else | ||||
| 				c2ln(in,tin0,tin1,l); | ||||
| 			tin0^=tout0; tin[0]=tin0; | ||||
| 			tin1^=tout1; tin[1]=tin1; | ||||
| 			des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); | ||||
| 			tout0=tin[0]; l2c(tout0,out); | ||||
| 			tout1=tin[1]; l2c(tout1,out); | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		c2l(iv,xor0); | ||||
| 		c2l(iv,xor1); | ||||
| 		for (; l>0; l-=8) | ||||
| 			{ | ||||
| 			c2l(in,tin0); tin[0]=tin0; | ||||
| 			c2l(in,tin1); tin[1]=tin1; | ||||
| 			des_encrypt((unsigned long *)tin,schedule,DES_DECRYPT); | ||||
| 			tout0=tin[0]^xor0; | ||||
| 			tout1=tin[1]^xor1; | ||||
| 			if (l >= 8) | ||||
| 				{ | ||||
| 				l2c(tout0,out); | ||||
| 				l2c(tout1,out); | ||||
| 				} | ||||
| 			else | ||||
| 				l2cn(tout0,tout1,out,l); | ||||
| 			xor0=tin0; | ||||
| 			xor1=tin1; | ||||
| 			} | ||||
| 		} | ||||
| 	tin0=tin1=tout0=tout1=xor0=xor1=0; | ||||
| 	tin[0]=tin[1]=0; | ||||
| 	} | ||||
|  | ||||
|   | ||||
							
								
								
									
										152
									
								
								lib/des/cfb64ede.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								lib/des/cfb64ede.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | ||||
| /* lib/des/cfb64enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* The input and output encrypted as though 64bit cfb mode is being | ||||
|  * used.  The extra state information to record how much of the | ||||
|  * 64bit block we have used is contained in *num; | ||||
|  */ | ||||
|  | ||||
| void des_ede3_cfb64_encrypt(in, out, length, ks1,ks2,ks3, ivec, num, encrypt) | ||||
| unsigned char *in; | ||||
| unsigned char *out; | ||||
| long length; | ||||
| des_key_schedule ks1,ks2,ks3; | ||||
| des_cblock (*ivec); | ||||
| int *num; | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	register unsigned long v0,v1; | ||||
| 	register long l=length,n=*num; | ||||
| 	unsigned long ti[2]; | ||||
| 	unsigned char *iv,c,cc; | ||||
|  | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	if (encrypt) | ||||
| 		{ | ||||
| 		while (l--) | ||||
| 			{ | ||||
| 			if (n == 0) | ||||
| 				{ | ||||
| 				c2l(iv,v0); | ||||
| 				c2l(iv,v1); | ||||
|  | ||||
| 				IP(v0,v1); | ||||
|  | ||||
| 				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); | ||||
| 				v0=ti[0]; | ||||
| 				v1=ti[1]; | ||||
|  | ||||
| 				FP(v1,v0); | ||||
|  | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				l2c(v0,iv); | ||||
| 				l2c(v1,iv); | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				} | ||||
| 			c= *(in++)^iv[n]; | ||||
| 			*(out++)=c; | ||||
| 			iv[n]=c; | ||||
| 			n=(n+1)&0x07; | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		while (l--) | ||||
| 			{ | ||||
| 			if (n == 0) | ||||
| 				{ | ||||
| 				c2l(iv,v0); | ||||
| 				c2l(iv,v1); | ||||
|  | ||||
| 				IP(v0,v1); | ||||
|  | ||||
| 				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); | ||||
|  | ||||
| 				v0=ti[0]; | ||||
| 				v1=ti[1]; | ||||
|  | ||||
| 				FP(v1,v0); | ||||
|  | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				l2c(v0,iv); | ||||
| 				l2c(v1,iv); | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				} | ||||
| 			cc= *(in++); | ||||
| 			c=iv[n]; | ||||
| 			iv[n]=cc; | ||||
| 			*(out++)=c^cc; | ||||
| 			n=(n+1)&0x07; | ||||
| 			} | ||||
| 		} | ||||
| 	v0=v1=ti[0]=ti[1]=c=cc=0; | ||||
| 	*num=n; | ||||
| 	} | ||||
|  | ||||
| #ifdef undef /* MACRO */ | ||||
| void des_ede2_cfb64_encrypt(in, out, length, ks1,ks2, ivec, num, encrypt) | ||||
| unsigned char *in; | ||||
| unsigned char *out; | ||||
| long length; | ||||
| des_key_schedule ks1,ks2; | ||||
| des_cblock (*ivec); | ||||
| int *num; | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	des_ede3_cfb64_encrypt(in,out,length,ks1,ks2,ks1,ivec,num,encrypt); | ||||
| 	} | ||||
| #endif | ||||
							
								
								
									
										116
									
								
								lib/des/cfb64enc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								lib/des/cfb64enc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,116 @@ | ||||
| /* lib/des/cfb64enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* The input and output encrypted as though 64bit cfb mode is being | ||||
|  * used.  The extra state information to record how much of the | ||||
|  * 64bit block we have used is contained in *num; | ||||
|  */ | ||||
|  | ||||
| void des_cfb64_encrypt(in, out, length, schedule, ivec, num, encrypt) | ||||
| unsigned char *in; | ||||
| unsigned char *out; | ||||
| long length; | ||||
| des_key_schedule schedule; | ||||
| des_cblock (*ivec); | ||||
| int *num; | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	register unsigned long v0,v1; | ||||
| 	register long l=length,n=*num; | ||||
| 	unsigned long ti[2]; | ||||
| 	unsigned char *iv,c,cc; | ||||
|  | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	if (encrypt) | ||||
| 		{ | ||||
| 		while (l--) | ||||
| 			{ | ||||
| 			if (n == 0) | ||||
| 				{ | ||||
| 				c2l(iv,v0); ti[0]=v0; | ||||
| 				c2l(iv,v1); ti[1]=v1; | ||||
| 				des_encrypt((unsigned long *)ti, | ||||
| 					schedule,DES_ENCRYPT); | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				v0=ti[0]; l2c(v0,iv); | ||||
| 				v0=ti[1]; l2c(v0,iv); | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				} | ||||
| 			c= *(in++)^iv[n]; | ||||
| 			*(out++)=c; | ||||
| 			iv[n]=c; | ||||
| 			n=(n+1)&0x07; | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		while (l--) | ||||
| 			{ | ||||
| 			if (n == 0) | ||||
| 				{ | ||||
| 				c2l(iv,v0); ti[0]=v0; | ||||
| 				c2l(iv,v1); ti[1]=v1; | ||||
| 				des_encrypt((unsigned long *)ti, | ||||
| 					schedule,DES_ENCRYPT); | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				v0=ti[0]; l2c(v0,iv); | ||||
| 				v0=ti[1]; l2c(v0,iv); | ||||
| 				iv=(unsigned char *)ivec; | ||||
| 				} | ||||
| 			cc= *(in++); | ||||
| 			c=iv[n]; | ||||
| 			iv[n]=cc; | ||||
| 			*(out++)=c^cc; | ||||
| 			n=(n+1)&0x07; | ||||
| 			} | ||||
| 		} | ||||
| 	v0=v1=ti[0]=ti[1]=c=cc=0; | ||||
| 	*num=n; | ||||
| 	} | ||||
|  | ||||
| @@ -1,5 +1,50 @@ | ||||
| /* cfb_enc.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/cfb_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* The input and output are loaded in multiples of 8 bits. | ||||
| @@ -8,92 +53,108 @@ | ||||
|  * the second.  The second 12 bits will come from the 3rd and half the 4th | ||||
|  * byte. | ||||
|  */ | ||||
| int des_cfb_encrypt(unsigned char *in, unsigned char *out, int numbits, long int length, struct des_ks_struct *schedule, des_cblock (*ivec), int encrypt) | ||||
| { | ||||
|   register u_int32_t d0,d1,v0,v1,n=(numbits+7)/8; | ||||
|   register u_int32_t mask0,mask1; | ||||
|   register long l=length; | ||||
|   register int num=numbits; | ||||
|   u_int32_t ti[2],to[2]; | ||||
|   unsigned char *iv; | ||||
|  | ||||
|   if (num > 64) return(0); | ||||
|   if (num > 32) | ||||
|     { | ||||
|       mask0=0xffffffff; | ||||
|       if (num == 64) | ||||
| 	mask1=mask0; | ||||
|       else | ||||
| 	mask1=(1L<<(num-32))-1; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (num == 32) | ||||
| 	mask0=0xffffffff; | ||||
|       else | ||||
| 	mask0=(1L<<num)-1; | ||||
|       mask1=0x00000000; | ||||
|     } | ||||
|  | ||||
|   iv=(unsigned char *)ivec; | ||||
|   c2l(iv,v0); | ||||
|   c2l(iv,v1); | ||||
|   if (encrypt) | ||||
|     { | ||||
|       while (l-- > 0) | ||||
| void des_cfb_encrypt(in, out, numbits, length, schedule, ivec, encrypt) | ||||
| unsigned char *in; | ||||
| unsigned char *out; | ||||
| int numbits; | ||||
| long length; | ||||
| des_key_schedule schedule; | ||||
| des_cblock (*ivec); | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	  ti[0]=v0; | ||||
| 	  ti[1]=v1; | ||||
| 	  des_encrypt(ti,to, | ||||
| 		      schedule,DES_ENCRYPT); | ||||
| 	  c2ln(in,d0,d1,n); | ||||
| 	  in+=n; | ||||
| 	  d0=(d0^to[0])&mask0; | ||||
| 	  d1=(d1^to[1])&mask1; | ||||
| 	  l2cn(d0,d1,out,n); | ||||
| 	  out+=n; | ||||
| 	  if (num > 32) | ||||
| 	    { | ||||
| 	      v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffff; | ||||
| 	      v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffff; | ||||
| 	    } | ||||
| 	  else | ||||
| 	    { | ||||
| 	      v0=((v0>>num)|(v1<<(32-num)))&0xffffffff; | ||||
| 	      v1=((v1>>num)|(d0<<(32-num)))&0xffffffff; | ||||
| 	    } | ||||
| 	} | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       while (l-- > 0) | ||||
| 	{ | ||||
| 	  ti[0]=v0; | ||||
| 	  ti[1]=v1; | ||||
| 	  des_encrypt(ti,to, | ||||
| 		      schedule,DES_ENCRYPT); | ||||
| 	  c2ln(in,d0,d1,n); | ||||
| 	  in+=n; | ||||
| 	  if (num > 32) | ||||
| 	    { | ||||
| 	      v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffff; | ||||
| 	      v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffff; | ||||
| 	    } | ||||
| 	  else | ||||
| 	    { | ||||
| 	      v0=((v0>>num)|(v1<<(32-num)))&0xffffffff; | ||||
| 	      v1=((v1>>num)|(d0<<(32-num)))&0xffffffff; | ||||
| 	    } | ||||
| 	  d0=(d0^to[0])&mask0; | ||||
| 	  d1=(d1^to[1])&mask1; | ||||
| 	  l2cn(d0,d1,out,n); | ||||
| 	  out+=n; | ||||
| 	} | ||||
|     } | ||||
|   iv=(unsigned char *)ivec; | ||||
|   l2c(v0,iv); | ||||
|   l2c(v1,iv); | ||||
|   v0=v1=d0=d1=ti[0]=ti[1]=to[0]=to[1]=0; | ||||
|   return(0); | ||||
| } | ||||
| 	register unsigned long d0,d1,v0,v1,n=(numbits+7)/8; | ||||
| 	register unsigned long mask0,mask1; | ||||
| 	register unsigned long l=length; | ||||
| 	register int num=numbits; | ||||
| 	unsigned long ti[2]; | ||||
| 	unsigned char *iv; | ||||
|  | ||||
| 	if (num > 64) return; | ||||
| 	if (num > 32) | ||||
| 		{ | ||||
| 		mask0=0xffffffffL; | ||||
| 		if (num == 64) | ||||
| 			mask1=mask0; | ||||
| 		else	mask1=(1L<<(num-32))-1; | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		if (num == 32) | ||||
| 			mask0=0xffffffffL; | ||||
| 		else	mask0=(1L<<num)-1; | ||||
| 		mask1=0x00000000; | ||||
| 		} | ||||
|  | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	c2l(iv,v0); | ||||
| 	c2l(iv,v1); | ||||
| 	if (encrypt) | ||||
| 		{ | ||||
| 		while (l >= n) | ||||
| 			{ | ||||
| 			l-=n; | ||||
| 			ti[0]=v0; | ||||
| 			ti[1]=v1; | ||||
| 			des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); | ||||
| 			c2ln(in,d0,d1,n); | ||||
| 			in+=n; | ||||
| 			d0=(d0^ti[0])&mask0; | ||||
| 			d1=(d1^ti[1])&mask1; | ||||
| 			l2cn(d0,d1,out,n); | ||||
| 			out+=n; | ||||
| 			/* 30-08-94 - eay - changed because l>>32 and | ||||
| 			 * l<<32 are bad under gcc :-( */ | ||||
| 			if (num == 32) | ||||
| 				{ v0=v1; v1=d0; } | ||||
| 			else if (num == 64) | ||||
| 				{ v0=d0; v1=d1; } | ||||
| 			else if (num > 32) /* && num != 64 */ | ||||
| 				{ | ||||
| 				v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffffL; | ||||
| 				v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffffL; | ||||
| 				} | ||||
| 			else /* num < 32 */ | ||||
| 				{ | ||||
| 				v0=((v0>>num)|(v1<<(32-num)))&0xffffffffL; | ||||
| 				v1=((v1>>num)|(d0<<(32-num)))&0xffffffffL; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		while (l >= n) | ||||
| 			{ | ||||
| 			l-=n; | ||||
| 			ti[0]=v0; | ||||
| 			ti[1]=v1; | ||||
| 			des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); | ||||
| 			c2ln(in,d0,d1,n); | ||||
| 			in+=n; | ||||
| 			/* 30-08-94 - eay - changed because l>>32 and | ||||
| 			 * l<<32 are bad under gcc :-( */ | ||||
| 			if (num == 32) | ||||
| 				{ v0=v1; v1=d0; } | ||||
| 			else if (num == 64) | ||||
| 				{ v0=d0; v1=d1; } | ||||
| 			else if (num > 32) /* && num != 64 */ | ||||
| 				{ | ||||
| 				v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffffL; | ||||
| 				v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffffL; | ||||
| 				} | ||||
| 			else /* num < 32 */ | ||||
| 				{ | ||||
| 				v0=((v0>>num)|(v1<<(32-num)))&0xffffffffL; | ||||
| 				v1=((v1>>num)|(d0<<(32-num)))&0xffffffffL; | ||||
| 				} | ||||
| 			d0=(d0^ti[0])&mask0; | ||||
| 			d1=(d1^ti[1])&mask1; | ||||
| 			l2cn(d0,d1,out,n); | ||||
| 			out+=n; | ||||
| 			} | ||||
| 		} | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	l2c(v0,iv); | ||||
| 	l2c(v1,iv); | ||||
| 	v0=v1=d0=d1=ti[0]=ti[1]=0; | ||||
| 	} | ||||
|  | ||||
|   | ||||
							
								
								
									
										1616
									
								
								lib/des/des.c
									
									
									
									
									
								
							
							
						
						
									
										1616
									
								
								lib/des/des.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										472
									
								
								lib/des/des.doc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										472
									
								
								lib/des/des.doc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,472 @@ | ||||
| The DES library. | ||||
|  | ||||
| Please note that this library was originally written to operate with | ||||
| eBones, a version of Kerberos that had had encryption removed when it left | ||||
| the USA and then put back in.  As such there are some routines that I will | ||||
| advise not using but they are still in the library for historical reasons. | ||||
| For all calls that have an 'input' and 'output' variables, they can be the | ||||
| same. | ||||
|  | ||||
| This library requires the inclusion of 'des.h'. | ||||
|  | ||||
| All of the encryption functions take what is called a des_key_schedule as an  | ||||
| argument.  A des_key_schedule is an expanded form of the des key. | ||||
| A des_key is 8 bytes of odd parity, the type used to hold the key is a | ||||
| des_cblock.  A des_cblock is an array of 8 bytes, often in this library | ||||
| description I will refer to input bytes when the function specifies | ||||
| des_cblock's as input or output, this just means that the variable should | ||||
| be a multiple of 8 bytes. | ||||
|  | ||||
| The define DES_ENCRYPT is passed to specify encryption, DES_DECRYPT to | ||||
| specify decryption.  The functions and global variable are as follows: | ||||
|  | ||||
| int des_check_key; | ||||
| 	DES keys are supposed to be odd parity.  If this variable is set to | ||||
| 	a non-zero value, des_set_key() will check that the key has odd | ||||
| 	parity and is not one of the known weak DES keys.  By default this | ||||
| 	variable is turned off; | ||||
| 	 | ||||
| void des_set_odd_parity( | ||||
| des_cblock *key ); | ||||
| 	This function takes a DES key (8 bytes) and sets the parity to odd. | ||||
| 	 | ||||
| int des_is_weak_key( | ||||
| des_cblock *key ); | ||||
| 	This function returns a non-zero value if the DES key passed is a | ||||
| 	weak, DES key.  If it is a weak key, don't use it, try a different | ||||
| 	one.  If you are using 'random' keys, the chances of hitting a weak | ||||
| 	key are 1/2^52 so it is probably not worth checking for them. | ||||
| 	 | ||||
| int des_set_key( | ||||
| des_cblock *key, | ||||
| des_key_schedule schedule); | ||||
| 	Des_set_key converts an 8 byte DES key into a des_key_schedule. | ||||
| 	A des_key_schedule is an expanded form of the key which is used to | ||||
| 	perform actual encryption.  It can be regenerated from the DES key | ||||
| 	so it only needs to be kept when encryption or decryption is about | ||||
| 	to occur.  Don't save or pass around des_key_schedule's since they | ||||
| 	are CPU architecture dependent, DES keys are not.  If des_check_key | ||||
| 	is non zero, zero is returned if the key has the wrong parity or | ||||
| 	the key is a weak key, else 1 is returned. | ||||
| 	 | ||||
| int des_key_sched( | ||||
| des_cblock *key, | ||||
| des_key_schedule schedule); | ||||
| 	An alternative name for des_set_key(). | ||||
|  | ||||
| int des_rw_mode;		/* defaults to DES_PCBC_MODE */ | ||||
| 	This flag holds either DES_CBC_MODE or DES_PCBC_MODE (default). | ||||
| 	This specifies the function to use in the enc_read() and enc_write() | ||||
| 	functions. | ||||
|  | ||||
| void des_encrypt( | ||||
| unsigned long *data, | ||||
| des_key_schedule ks, | ||||
| int enc); | ||||
| 	This is the DES encryption function that gets called by just about | ||||
| 	every other DES routine in the library.  You should not use this | ||||
| 	function except to implement 'modes' of DES.  I say this because the | ||||
| 	functions that call this routine do the conversion from 'char *' to | ||||
| 	long, and this needs to be done to make sure 'non-aligned' memory | ||||
| 	access do not occur.  The characters are loaded 'little endian', | ||||
| 	have a look at my source code for more details on how I use this | ||||
| 	function. | ||||
| 	Data is a pointer to 2 unsigned long's and ks is the | ||||
| 	des_key_schedule to use.  enc, is non zero specifies encryption, | ||||
| 	zero if decryption. | ||||
|  | ||||
| void des_encrypt2( | ||||
| unsigned long *data, | ||||
| des_key_schedule ks, | ||||
| int enc); | ||||
| 	This functions is the same as des_encrypt() except that the DES | ||||
| 	initial permutation (IP) and final permutation (FP) have been left | ||||
| 	out.  As for des_encrypt(), you should not use this function. | ||||
| 	It is used by the routines in my library that implement triple DES. | ||||
| 	IP() des_encrypt2() des_encrypt2() des_encrypt2() FP() is the same | ||||
| 	as des_encrypt() des_encrypt() des_encrypt() except faster :-). | ||||
|  | ||||
| void des_ecb_encrypt( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| des_key_schedule ks, | ||||
| int enc); | ||||
| 	This is the basic Electronic Code Book form of DES, the most basic | ||||
| 	form.  Input is encrypted into output using the key represented by | ||||
| 	ks.  If enc is non zero (DES_ENCRYPT), encryption occurs, otherwise | ||||
| 	decryption occurs.  Input is 8 bytes long and output is 8 bytes. | ||||
| 	(the des_cblock structure is 8 chars). | ||||
| 	 | ||||
| void des_ecb3_encrypt( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| des_key_schedule ks1, | ||||
| des_key_schedule ks2, | ||||
| des_key_schedule ks3, | ||||
| int enc); | ||||
| 	This is the 3 key EDE mode of ECB DES.  What this means is that  | ||||
| 	the 8 bytes of input is encrypted with ks1, decrypted with ks2 and | ||||
| 	then encrypted again with ks3, before being put into output; | ||||
| 	C=E(ks3,D(ks2,E(ks1,M))).  There is a macro, des_ecb2_encrypt() | ||||
| 	that only takes 2 des_key_schedules that implements, | ||||
| 	C=E(ks1,D(ks2,E(ks1,M))) in that the final encrypt is done with ks1. | ||||
| 	 | ||||
| void des_cbc_encrypt( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| long length, | ||||
| des_key_schedule ks, | ||||
| des_cblock *ivec, | ||||
| int enc); | ||||
| 	This routine implements DES in Cipher Block Chaining mode. | ||||
| 	Input, which should be a multiple of 8 bytes is encrypted | ||||
| 	(or decrypted) to output which will also be a multiple of 8 bytes. | ||||
| 	The number of bytes is in length (and from what I've said above, | ||||
| 	should be a multiple of 8).  If length is not a multiple of 8, I'm | ||||
| 	not being held responsible :-).  ivec is the initialisation vector. | ||||
| 	This function does not modify this variable.  To correctly implement | ||||
| 	cbc mode, you need to do one of 2 things; copy the last 8 bytes of | ||||
| 	cipher text for use as the next ivec in your application, | ||||
| 	or use des_ncbc_encrypt().  | ||||
| 	Only this routine has this problem with updating the ivec, all | ||||
| 	other routines that are implementing cbc mode update ivec. | ||||
| 	 | ||||
| void des_ncbc_encrypt( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| long length, | ||||
| des_key_schedule sk, | ||||
| des_cblock *ivec, | ||||
| int enc); | ||||
| 	For historical reasons, des_cbc_encrypt() did not update the | ||||
| 	ivec with the value requires so that subsequent calls to | ||||
| 	des_cbc_encrypt() would 'chain'.  This was needed so that the same | ||||
| 	'length' values would not need to be used when decrypting. | ||||
| 	des_ncbc_encrypt() does the right thing.  It is the same as | ||||
| 	des_cbc_encrypt accept that ivec is updates with the correct value | ||||
| 	to pass in subsequent calls to des_ncbc_encrypt().  I advise using | ||||
| 	des_ncbc_encrypt() instead of des_cbc_encrypt(); | ||||
| 	 | ||||
| void des_3cbc_encrypt( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| long length, | ||||
| des_key_schedule sk1, | ||||
| des_key_schedule sk2, | ||||
| des_cblock *ivec1, | ||||
| des_cblock *ivec2, | ||||
| int enc); | ||||
| 	This function is flawed, do not use it.  I have left it in the | ||||
| 	library because it is used in my des(1) program and will function | ||||
| 	correctly when used by des(1).  If I removed the function, people | ||||
| 	could end up unable to decrypt files. | ||||
| 	This routine implements outer triple cbc encryption using 2 ks and | ||||
| 	2 ivec's.  Use des_ede2_cbc_encrypt() instead. | ||||
| 	 | ||||
| void des_ede3_cbc_encrypt( | ||||
| des_cblock *input, | ||||
| des_cblock *output,  | ||||
| long length, | ||||
| des_key_schedule ks1, | ||||
| des_key_schedule ks2,  | ||||
| des_key_schedule ks3,  | ||||
| des_cblock *ivec, | ||||
| int enc); | ||||
| 	This function implements inner triple CBC DES encryption with 3 | ||||
| 	keys.  What this means is that each 'DES' operation | ||||
| 	inside the cbc mode is really an C=E(ks3,D(ks2,E(ks1,M))). | ||||
| 	Again, this is cbc mode so an ivec is requires. | ||||
| 	This mode is used by SSL. | ||||
| 	There is also a des_ede2_cbc_encrypt() that only uses 2 | ||||
| 	des_key_schedule's, the first being reused for the final | ||||
| 	encryption.  C=E(ks1,D(ks2,E(ks1,M))).  This form of triple DES | ||||
| 	is used by the RSAref library. | ||||
| 	 | ||||
| void des_pcbc_encrypt( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| long length, | ||||
| des_key_schedule ks, | ||||
| des_cblock *ivec, | ||||
| int enc); | ||||
| 	This is Propagating Cipher Block Chaining mode of DES.  It is used | ||||
| 	by Kerberos v4.  It's parameters are the same as des_ncbc_encrypt(). | ||||
| 	 | ||||
| void des_cfb_encrypt( | ||||
| unsigned char *in, | ||||
| unsigned char *out, | ||||
| int numbits, | ||||
| long length, | ||||
| des_key_schedule ks, | ||||
| des_cblock *ivec, | ||||
| int enc); | ||||
| 	Cipher Feedback Back mode of DES.  This implementation 'feeds back' | ||||
| 	in numbit blocks.  The input (and output) is in multiples of numbits | ||||
| 	bits.  numbits needs to be a multiple of 8 bits.  Length is the | ||||
| 	number of bytes input. | ||||
| 	 | ||||
| void des_cfb64_encrypt( | ||||
| unsigned char *in, | ||||
| unsigned char *out, | ||||
| long length, | ||||
| des_key_schedule ks, | ||||
| des_cblock *ivec, | ||||
| int *num, | ||||
| int enc); | ||||
| 	This is one of the more useful functions in this DES library, it | ||||
| 	implements CFB mode of DES with 64bit feedback.  Why is this | ||||
| 	useful you ask?  Because this routine will allow you to encrypt an | ||||
| 	arbitrary number of bytes, no 8 byte padding.  Each call to this | ||||
| 	routine will encrypt the input bytes to output and then update ivec | ||||
| 	and num.  num contains 'how far' we are though ivec.  If this does | ||||
| 	not make much sense, read more about cfb mode of DES :-). | ||||
| 	 | ||||
| void des_ede3_cfb64_encrypt( | ||||
| unsigned char *in, | ||||
| unsigned char *out, | ||||
| long length, | ||||
| des_key_schedule ks1, | ||||
| des_key_schedule ks2, | ||||
| des_key_schedule ks3, | ||||
| des_cblock *ivec, | ||||
| int *num, | ||||
| int enc); | ||||
| 	Same as des_cfb64_encrypt() accept that the DES operation is | ||||
| 	triple DES.  As usual, there is a macro for | ||||
| 	des_ede2_cfb64_encrypt() which reuses ks1. | ||||
|  | ||||
| void des_ofb_encrypt( | ||||
| unsigned char *in, | ||||
| unsigned char *out, | ||||
| int numbits, | ||||
| long length, | ||||
| des_key_schedule ks, | ||||
| des_cblock *ivec); | ||||
| 	This is a implementation of Output Feed Back mode of DES.  It is | ||||
| 	the same as des_cfb_encrypt() in that numbits is the size of the | ||||
| 	units dealt with during input and output (in bits). | ||||
| 	 | ||||
| void des_ofb64_encrypt( | ||||
| unsigned char *in, | ||||
| unsigned char *out, | ||||
| long length, | ||||
| des_key_schedule ks, | ||||
| des_cblock *ivec, | ||||
| int *num); | ||||
| 	The same as des_cfb64_encrypt() except that it is Output Feed Back | ||||
| 	mode. | ||||
|  | ||||
| void des_ede3_ofb64_encrypt( | ||||
| unsigned char *in, | ||||
| unsigned char *out, | ||||
| long length, | ||||
| des_key_schedule ks1, | ||||
| des_key_schedule ks2, | ||||
| des_key_schedule ks3, | ||||
| des_cblock *ivec, | ||||
| int *num); | ||||
| 	Same as des_ofb64_encrypt() accept that the DES operation is | ||||
| 	triple DES.  As usual, there is a macro for | ||||
| 	des_ede2_ofb64_encrypt() which reuses ks1. | ||||
|  | ||||
| int des_read_pw_string( | ||||
| char *buf, | ||||
| int length, | ||||
| char *prompt, | ||||
| int verify); | ||||
| 	This routine is used to get a password from the terminal with echo | ||||
| 	turned off.  Buf is where the string will end up and length is the | ||||
| 	size of buf.  Prompt is a string presented to the 'user' and if | ||||
| 	verify is set, the key is asked for twice and unless the 2 copies | ||||
| 	match, an error is returned.  A return code of -1 indicates a | ||||
| 	system error, 1 failure due to use interaction, and 0 is success. | ||||
|  | ||||
| unsigned long des_cbc_cksum( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| long length, | ||||
| des_key_schedule ks, | ||||
| des_cblock *ivec); | ||||
| 	This function produces an 8 byte checksum from input that it puts in | ||||
| 	output and returns the last 4 bytes as a long.  The checksum is | ||||
| 	generated via cbc mode of DES in which only the last 8 byes are | ||||
| 	kept.  I would recommend not using this function but instead using | ||||
| 	the EVP_Digest routines, or at least using MD5 or SHA.  This | ||||
| 	function is used by Kerberos v4 so that is why it stays in the | ||||
| 	library. | ||||
| 	 | ||||
| char *crypt( | ||||
| const char *buf, | ||||
| const char *salt); | ||||
| 	This is my fast version of the unix crypt(3) function.  This version | ||||
| 	takes only a small amount of space relative to other fast | ||||
| 	crypt() implementations. | ||||
|  | ||||
| void des_string_to_key( | ||||
| char *str, | ||||
| des_cblock *key); | ||||
| 	This function takes str and converts it into a DES key.  I would | ||||
| 	recommend using MD5 instead and use the first 8 bytes of output. | ||||
| 	When I wrote the first version of these routines back in 1990, MD5 | ||||
| 	did not exist but I feel these routines are still sound.  This | ||||
| 	routines is compatible with the one in MIT's libdes. | ||||
| 	 | ||||
| void des_string_to_2keys( | ||||
| char *str, | ||||
| des_cblock *key1, | ||||
| des_cblock *key2); | ||||
| 	This function takes str and converts it into 2 DES keys. | ||||
| 	I would recommend using MD5 and using the 16 bytes as the 2 keys. | ||||
| 	I have nothing against these 2 'string_to_key' routines, it's just | ||||
| 	that if you say that your encryption key is generated by using the | ||||
| 	16 bytes of an MD5 hash, every-one knows how you generated your | ||||
| 	keys. | ||||
|  | ||||
| int des_read_password( | ||||
| des_cblock *key, | ||||
| char *prompt, | ||||
| int verify); | ||||
| 	This routine combines des_read_pw_string() with des_string_to_key(). | ||||
|  | ||||
| int des_read_2passwords( | ||||
| des_cblock *key1, | ||||
| des_cblock *key2, | ||||
| char *prompt, | ||||
| int verify); | ||||
| 	This routine combines des_read_pw_string() with des_string_to_2key(). | ||||
|  | ||||
| void des_random_seed( | ||||
| des_cblock key); | ||||
| 	This routine sets a starting point for des_random_key(). | ||||
| 	 | ||||
| void des_random_key( | ||||
| des_cblock ret); | ||||
| 	This function return a random key.  Make sure to 'seed' the random | ||||
| 	number generator (with des_random_seed()) before using this function. | ||||
| 	I personally now use a MD5 based random number system. | ||||
|  | ||||
| int des_enc_read( | ||||
| int fd, | ||||
| char *buf, | ||||
| int len, | ||||
| des_key_schedule ks, | ||||
| des_cblock *iv); | ||||
| 	This function will write to a file descriptor the encrypted data | ||||
| 	from buf.  This data will be preceded by a 4 byte 'byte count' and | ||||
| 	will be padded out to 8 bytes.  The encryption is either CBC of | ||||
| 	PCBC depending on the value of des_rw_mode.  If it is DES_PCBC_MODE, | ||||
| 	pcbc is used, if DES_CBC_MODE, cbc is used.  The default is to use | ||||
| 	DES_PCBC_MODE. | ||||
|  | ||||
| int des_enc_write( | ||||
| int fd, | ||||
| char *buf, | ||||
| int len, | ||||
| des_key_schedule ks, | ||||
| des_cblock *iv); | ||||
| 	This routines read stuff written by des_enc_read() and decrypts it. | ||||
| 	I have used these routines quite a lot but I don't believe they are | ||||
| 	suitable for non-blocking io.  If you are after a full | ||||
| 	authentication/encryption over networks, have a look at SSL instead. | ||||
|  | ||||
| unsigned long des_quad_cksum( | ||||
| des_cblock *input, | ||||
| des_cblock *output, | ||||
| long length, | ||||
| int out_count, | ||||
| des_cblock *seed); | ||||
| 	This is a function from Kerberos v4 that is not anything to do with | ||||
| 	DES but was needed.  It is a cksum that is quicker to generate than | ||||
| 	des_cbc_cksum();  I personally would use MD5 routines now. | ||||
| ===== | ||||
| Modes of DES | ||||
| Quite a bit of the following information has been taken from | ||||
| 	AS 2805.5.2 | ||||
| 	Australian Standard | ||||
| 	Electronic funds transfer - Requirements for interfaces, | ||||
| 	Part 5.2: Modes of operation for an n-bit block cipher algorithm | ||||
| 	Appendix A | ||||
|  | ||||
| There are several different modes in which DES can be used, they are | ||||
| as follows. | ||||
|  | ||||
| Electronic Codebook Mode (ECB) (des_ecb_encrypt()) | ||||
| - 64 bits are enciphered at a time. | ||||
| - The order of the blocks can be rearranged without detection. | ||||
| - The same plaintext block always produces the same ciphertext block | ||||
|   (for the same key) making it vulnerable to a 'dictionary attack'. | ||||
| - An error will only affect one ciphertext block. | ||||
|  | ||||
| Cipher Block Chaining Mode (CBC) (des_cbc_encrypt()) | ||||
| - a multiple of 64 bits are enciphered at a time. | ||||
| - The CBC mode produces the same ciphertext whenever the same | ||||
|   plaintext is encrypted using the same key and starting variable. | ||||
| - The chaining operation makes the ciphertext blocks dependent on the | ||||
|   current and all preceding plaintext blocks and therefore blocks can not | ||||
|   be rearranged. | ||||
| - The use of different starting variables prevents the same plaintext | ||||
|   enciphering to the same ciphertext. | ||||
| - An error will affect the current and the following ciphertext blocks. | ||||
|  | ||||
| Cipher Feedback Mode (CFB) (des_cfb_encrypt()) | ||||
| - a number of bits (j) <= 64 are enciphered at a time. | ||||
| - The CFB mode produces the same ciphertext whenever the same | ||||
|   plaintext is encrypted using the same key and starting variable. | ||||
| - The chaining operation makes the ciphertext variables dependent on the | ||||
|   current and all preceding variables and therefore j-bit variables are | ||||
|   chained together and can not be rearranged. | ||||
| - The use of different starting variables prevents the same plaintext | ||||
|   enciphering to the same ciphertext. | ||||
| - The strength of the CFB mode depends on the size of k (maximal if | ||||
|   j == k).  In my implementation this is always the case. | ||||
| - Selection of a small value for j will require more cycles through | ||||
|   the encipherment algorithm per unit of plaintext and thus cause | ||||
|   greater processing overheads. | ||||
| - Only multiples of j bits can be enciphered. | ||||
| - An error will affect the current and the following ciphertext variables. | ||||
|  | ||||
| Output Feedback Mode (OFB) (des_ofb_encrypt()) | ||||
| - a number of bits (j) <= 64 are enciphered at a time. | ||||
| - The OFB mode produces the same ciphertext whenever the same | ||||
|   plaintext enciphered using the same key and starting variable.  More | ||||
|   over, in the OFB mode the same key stream is produced when the same | ||||
|   key and start variable are used.  Consequently, for security reasons | ||||
|   a specific start variable should be used only once for a given key. | ||||
| - The absence of chaining makes the OFB more vulnerable to specific attacks. | ||||
| - The use of different start variables values prevents the same | ||||
|   plaintext enciphering to the same ciphertext, by producing different | ||||
|   key streams. | ||||
| - Selection of a small value for j will require more cycles through | ||||
|   the encipherment algorithm per unit of plaintext and thus cause | ||||
|   greater processing overheads. | ||||
| - Only multiples of j bits can be enciphered. | ||||
| - OFB mode of operation does not extend ciphertext errors in the | ||||
|   resultant plaintext output.  Every bit error in the ciphertext causes | ||||
|   only one bit to be in error in the deciphered plaintext. | ||||
| - OFB mode is not self-synchronising.  If the two operation of | ||||
|   encipherment and decipherment get out of synchronism, the system needs | ||||
|   to be re-initialised. | ||||
| - Each re-initialisation should use a value of the start variable | ||||
|  different from the start variable values used before with the same | ||||
|  key.  The reason for this is that an identical bit stream would be | ||||
|  produced each time from the same parameters.  This would be | ||||
|  susceptible to a ' known plaintext' attack. | ||||
|  | ||||
| Triple ECB Mode (des_ecb3_encrypt()) | ||||
| - Encrypt with key1, decrypt with key2 and encrypt with key3 again. | ||||
| - As for ECB encryption but increases the key length to 168 bits. | ||||
|   There are theoretic attacks that can be used that make the effective | ||||
|   key length 112 bits, but this attack also requires 2^56 blocks of | ||||
|   memory, not very likely, even for the NSA. | ||||
| - If both keys are the same it is equivalent to encrypting once with | ||||
|   just one key. | ||||
| - If the first and last key are the same, the key length is 112 bits. | ||||
|   There are attacks that could reduce the key space to 55 bit's but it | ||||
|   requires 2^56 blocks of memory. | ||||
| - If all 3 keys are the same, this is effectively the same as normal | ||||
|   ecb mode. | ||||
|  | ||||
| Triple CBC Mode (des_ede3_cbc_encrypt()) | ||||
| - Encrypt with key1, decrypt with key2 and then encrypt with key3. | ||||
| - As for CBC encryption but increases the key length to 168 bits with | ||||
|   the same restrictions as for triple ecb mode. | ||||
							
								
								
									
										242
									
								
								lib/des/des.h
									
									
									
									
									
								
							
							
						
						
									
										242
									
								
								lib/des/des.h
									
									
									
									
									
								
							| @@ -1,10 +1,54 @@ | ||||
| /* des.h */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| #ifndef DES_DEFS | ||||
| #define DES_DEFS | ||||
| /* lib/des/des.h */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include <sys/bitypes.h> | ||||
| #include <sys/cdefs.h> | ||||
| #ifndef HEADER_DES_H | ||||
| #define HEADER_DES_H | ||||
|  | ||||
| #include <stdio.h> | ||||
|  | ||||
| typedef unsigned char des_cblock[8]; | ||||
| typedef struct des_ks_struct | ||||
| @@ -13,19 +57,33 @@ typedef struct des_ks_struct | ||||
| 		des_cblock _; | ||||
| 		/* make sure things are correct size on machines with | ||||
| 		 * 8 byte longs */ | ||||
| 		u_int32_t pad[2]; | ||||
| 		unsigned long pad[2]; | ||||
| 		} ks; | ||||
| #undef _ | ||||
| #define _	ks._ | ||||
| 	} des_key_schedule[16]; | ||||
|  | ||||
| #define DES_KEY_SZ 	(sizeof(des_cblock)) | ||||
| #define DES_SCHEDULE_SZ (sizeof(des_key_schedule)) | ||||
|  | ||||
| #define DES_ENCRYPT	1 | ||||
| #define DES_DECRYPT	0 | ||||
|  | ||||
| #define DES_CBC_MODE	0 | ||||
| #define DES_PCBC_MODE	1 | ||||
|  | ||||
| #if !defined(NCOMPAT) | ||||
| #define des_ecb2_encrypt(i,o,k1,k2,e) \ | ||||
| 	des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) | ||||
|  | ||||
| #define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ | ||||
| 	des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) | ||||
|  | ||||
| #define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ | ||||
| 	des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) | ||||
|  | ||||
| #define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ | ||||
| 	des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) | ||||
|  | ||||
| #define C_Block des_cblock | ||||
| #define Key_schedule des_key_schedule | ||||
| #define ENCRYPT DES_ENCRYPT | ||||
| @@ -39,51 +97,151 @@ typedef struct des_ks_struct | ||||
| #define key_sched des_key_sched | ||||
| #define ecb_encrypt des_ecb_encrypt | ||||
| #define cbc_encrypt des_cbc_encrypt | ||||
| #define ncbc_encrypt des_ncbc_encrypt | ||||
| #define cbc_cksum des_cbc_cksum | ||||
| #define quad_cksum des_quad_cksum | ||||
|  | ||||
| /* For compatibility with the MIT lib - eay 20/05/92 */ | ||||
| typedef struct des_ks_struct bit_64; | ||||
| #endif | ||||
| typedef struct des_key_schedule bit_64; | ||||
| #define des_fixup_key_parity des_set_odd_parity | ||||
| #define des_check_key_parity check_parity | ||||
|  | ||||
| extern int des_check_key;	/* defaults to false */ | ||||
| extern int des_rw_mode;		/* defaults to DES_PCBC_MODE */ | ||||
|  | ||||
| int des_3ecb_encrypt __P((des_cblock *input,des_cblock *output,des_key_schedule ks1,des_key_schedule ks2,int encrypt)); | ||||
| int des_3cbc_encrypt __P((des_cblock *input,des_cblock *output,long length,des_key_schedule sk1,des_key_schedule sk2,des_cblock *ivec1,des_cblock *ivec2,int encrypt)); | ||||
| u_int32_t des_cbc_cksum __P((des_cblock *input,des_cblock *output,long length,des_key_schedule schedule,des_cblock *ivec)); | ||||
| int des_cbc_encrypt __P((des_cblock *input,des_cblock *output,long length,des_key_schedule schedule,des_cblock *ivec,int encrypt)); | ||||
| int des_cfb_encrypt __P((unsigned char *in,unsigned char *out,int numbits,long length,des_key_schedule schedule,des_cblock *ivec,int encrypt)); | ||||
| int des_ecb_encrypt __P((des_cblock *input,des_cblock *output,des_key_schedule ks,int encrypt)); | ||||
| int des_encrypt __P((u_int32_t *input,u_int32_t *output,des_key_schedule ks, int encrypt)); | ||||
| int des_enc_read __P((int fd,char *buf,int len,des_key_schedule sched,des_cblock *iv)); | ||||
| int des_enc_write __P((int fd,char *buf,int len,des_key_schedule sched,des_cblock *iv)); | ||||
| int des_ofb_encrypt __P((unsigned char *in,unsigned char *out,int numbits,long length,des_key_schedule schedule,des_cblock *ivec)); | ||||
| int des_pcbc_encrypt __P((des_cblock *input,des_cblock *output,long length,des_key_schedule schedule,des_cblock *ivec,int encrypt)); | ||||
| /* The next line is used to disable full ANSI prototypes, if your | ||||
|  * compiler has problems with the prototypes, make sure this line always | ||||
|  * evaluates to true :-) */ | ||||
| #if defined(MSDOS) || defined(__STDC__) | ||||
| #undef PROTO | ||||
| #define PROTO | ||||
| #endif | ||||
| #ifdef PROTO | ||||
| void des_ecb3_encrypt(des_cblock *input,des_cblock *output, | ||||
| 	des_key_schedule ks1,des_key_schedule ks2, | ||||
| 	des_key_schedule ks3, int enc); | ||||
| unsigned long des_cbc_cksum(des_cblock *input,des_cblock *output, | ||||
| 	long length,des_key_schedule schedule,des_cblock *ivec); | ||||
| void des_cbc_encrypt(des_cblock *input,des_cblock *output,long length, | ||||
| 	des_key_schedule schedule,des_cblock *ivec,int enc); | ||||
| void des_ncbc_encrypt(des_cblock *input,des_cblock *output,long length, | ||||
| 	des_key_schedule schedule,des_cblock *ivec,int enc); | ||||
| void des_3cbc_encrypt(des_cblock *input,des_cblock *output,long length, | ||||
| 	des_key_schedule sk1,des_key_schedule sk2, | ||||
| 	des_cblock *ivec1,des_cblock *ivec2,int enc); | ||||
| void des_cfb_encrypt(unsigned char *in,unsigned char *out,int numbits, | ||||
| 	long length,des_key_schedule schedule,des_cblock *ivec,int enc); | ||||
| void des_ecb_encrypt(des_cblock *input,des_cblock *output, | ||||
| 	des_key_schedule ks,int enc); | ||||
| void des_encrypt(unsigned long *data,des_key_schedule ks, int enc); | ||||
| void des_encrypt2(unsigned long *data,des_key_schedule ks, int enc); | ||||
| void des_ede3_cbc_encrypt(des_cblock *input, des_cblock *output,  | ||||
| 	long length, des_key_schedule ks1, des_key_schedule ks2,  | ||||
| 	des_key_schedule ks3, des_cblock *ivec, int enc); | ||||
| void des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, | ||||
| 	long length, des_key_schedule ks1, des_key_schedule ks2, | ||||
| 	des_key_schedule ks3, des_cblock *ivec, int *num, int encrypt); | ||||
| void des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, | ||||
| 	long length, des_key_schedule ks1, des_key_schedule ks2, | ||||
| 	des_key_schedule ks3, des_cblock *ivec, int *num); | ||||
|  | ||||
| void des_set_odd_parity __P((des_cblock *key)); | ||||
| int des_is_weak_key __P((des_cblock *key)); | ||||
| int des_set_key __P((des_cblock *key,des_key_schedule schedule)); | ||||
| int des_key_sched __P((des_cblock *key,des_key_schedule schedule)); | ||||
| int des_enc_read(int fd,char *buf,int len,des_key_schedule sched, | ||||
| 	des_cblock *iv); | ||||
| int des_enc_write(int fd,char *buf,int len,des_key_schedule sched, | ||||
| 	des_cblock *iv); | ||||
| #ifdef PERL5 | ||||
| char *des_crypt(const char *buf,const char *salt); | ||||
| #else | ||||
| /* some stupid compilers complain because I have declared char instead | ||||
|  * of const char */ | ||||
| #ifdef HEADER_DES_LOCL_H | ||||
| char *crypt(const char *buf,const char *salt); | ||||
| #else | ||||
| char *crypt(); | ||||
| #endif | ||||
| #endif | ||||
| void des_ofb_encrypt(unsigned char *in,unsigned char *out, | ||||
| 	int numbits,long length,des_key_schedule schedule,des_cblock *ivec); | ||||
| void des_pcbc_encrypt(des_cblock *input,des_cblock *output,long length, | ||||
| 	des_key_schedule schedule,des_cblock *ivec,int enc); | ||||
| unsigned long des_quad_cksum(des_cblock *input,des_cblock *output, | ||||
| 	long length,int out_count,des_cblock *seed); | ||||
| void des_random_seed(des_cblock key); | ||||
| void des_random_key(des_cblock ret); | ||||
| int des_read_password(des_cblock *key,char *prompt,int verify); | ||||
| int des_read_2passwords(des_cblock *key1,des_cblock *key2, | ||||
| 	char *prompt,int verify); | ||||
| int des_read_pw_string(char *buf,int length,char *prompt,int verify); | ||||
| void des_set_odd_parity(des_cblock *key); | ||||
| int des_is_weak_key(des_cblock *key); | ||||
| int des_set_key(des_cblock *key,des_key_schedule schedule); | ||||
| int des_key_sched(des_cblock *key,des_key_schedule schedule); | ||||
| void des_string_to_key(char *str,des_cblock *key); | ||||
| void des_string_to_2keys(char *str,des_cblock *key1,des_cblock *key2); | ||||
| void des_cfb64_encrypt(unsigned char *in, unsigned char *out, long length, | ||||
| 	des_key_schedule schedule, des_cblock *ivec, int *num, int enc); | ||||
| void des_ofb64_encrypt(unsigned char *in, unsigned char *out, long length, | ||||
| 	des_key_schedule schedule, des_cblock *ivec, int *num); | ||||
|  | ||||
| int des_string_to_key __P((char *str,des_cblock *key)); | ||||
| int des_string_to_2keys __P((char *str,des_cblock *key1,des_cblock *key2)); | ||||
| /* Extra functions from Mark Murray <mark@grondar.za> */ | ||||
| void des_cblock_print_file(des_cblock *cb, FILE *fp); | ||||
| /* The following functions are not in the normal unix build or the | ||||
|  * SSLeay build.  When using the SSLeay build, use RAND_seed() | ||||
|  * and RAND_bytes() instead. */ | ||||
| int des_new_random_key(des_cblock *key); | ||||
| void des_init_random_number_generator(des_cblock *key); | ||||
| void des_set_random_generator_seed(des_cblock *key); | ||||
| void des_set_sequence_number(des_cblock new_sequence_number); | ||||
| void des_generate_random_block(des_cblock *block); | ||||
|  | ||||
| void des_rand_data __P((unsigned char *data, int size)); | ||||
| void des_generate_random_block __P((des_cblock *block)); | ||||
| void des_set_random_generator_seed __P((des_cblock *seed)); | ||||
| int des_new_random_key __P((des_cblock *key)); | ||||
| void des_init_random_number_generator __P((des_cblock *seed)); | ||||
| void des_set_sequence_number __P((unsigned char *ll)); | ||||
| int des_random_key __P((des_cblock ret)); | ||||
| int des_read_password __P((des_cblock *key,char *prompt,int verify)); | ||||
| int des_read_2passwords __P((des_cblock *key1,des_cblock *key2,char *prompt,int verify)); | ||||
| int des_read_pw_string __P((char *buf,int length,char *prompt,int verify)); | ||||
| #else | ||||
|  | ||||
| u_int32_t des_quad_cksum __P((des_cblock *input,des_cblock *output,long length,int out_count,des_cblock *seed)); | ||||
| void des_ecb3_encrypt(); | ||||
| unsigned long des_cbc_cksum(); | ||||
| void des_cbc_encrypt(); | ||||
| void des_ncbc_encrypt(); | ||||
| void des_3cbc_encrypt(); | ||||
| void des_cfb_encrypt(); | ||||
| void des_ede3_cfb64_encrypt(); | ||||
| void des_ede3_ofb64_encrypt(); | ||||
| void des_ecb_encrypt(); | ||||
| void des_encrypt(); | ||||
| void des_encrypt2(); | ||||
| void des_ede3_cbc_encrypt(); | ||||
| int des_enc_read(); | ||||
| int des_enc_write(); | ||||
| #ifdef PERL5 | ||||
| char *des_crypt(); | ||||
| #else | ||||
| char *crypt(); | ||||
| #endif | ||||
| void des_ofb_encrypt(); | ||||
| void des_pcbc_encrypt(); | ||||
| unsigned long des_quad_cksum(); | ||||
| void des_random_seed(); | ||||
| void des_random_key(); | ||||
| int des_read_password(); | ||||
| int des_read_2passwords(); | ||||
| int des_read_pw_string(); | ||||
| void des_set_odd_parity(); | ||||
| int des_is_weak_key(); | ||||
| int des_set_key(); | ||||
| int des_key_sched(); | ||||
| void des_string_to_key(); | ||||
| void des_string_to_2keys(); | ||||
| void des_cfb64_encrypt(); | ||||
| void des_ofb64_encrypt(); | ||||
|  | ||||
| /* MIT Link and source compatibility */ | ||||
| void des_fixup_key_parity __P((des_cblock *key)); | ||||
| #define des_fixup_key_parity des_set_odd_parity | ||||
| /* Extra functions from Mark Murray <mark@grondar.za> */ | ||||
| void des_cblock_print_file(); | ||||
| /* The following functions are not in the normal unix build or the | ||||
|  * SSLeay build.  When using the SSLeay build, use RAND_seed() | ||||
|  * and RAND_bytes() instead. */ | ||||
| int des_new_random_key(); | ||||
| void des_init_random_number_generator(); | ||||
| void des_set_random_generator_seed(); | ||||
| void des_set_sequence_number(); | ||||
| void des_generate_random_block(); | ||||
|  | ||||
| #endif /* DES_DEFS */ | ||||
| #endif | ||||
| #endif | ||||
|   | ||||
| @@ -183,5 +183,4 @@ with 424 null bytes.  To get around this problem, use the -u option | ||||
| to uuencode the data before it is send to the VMS system. | ||||
| .SH AUTHOR | ||||
| .LP | ||||
| Eric Young (eay@psych.psy.uq.oz.au), Psychology Department, | ||||
| University of Queensland, Australia. | ||||
| Eric Young (eay@mincom.oz.au or eay@psych.psy.uq.oz.au) | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| #!/usr/local/bin/perl | ||||
| # Copyright (C) 1993 Eric Young | ||||
| # des.pl - eric young 22/11/1991 eay@psych.psy.uq.oz.au | ||||
| # des.pl - eric young 22/11/1991 eay@mincom.oz.au or eay@psych.psy.uq.oz.au | ||||
| # eay - 92/08/31 - I think I have fixed all problems for 64bit | ||||
| # versions of perl but I could be wrong since I have not tested it yet :-). | ||||
| # | ||||
| @@ -452,7 +452,7 @@ sub doFP | ||||
| sub main'des_ecb_encrypt | ||||
| 	{ | ||||
| 	local(*ks,$encrypt,$in)=@_; | ||||
| 	local($l,$r,$inc,$start,$end,$i,$t,$u,@input); | ||||
| 	local($l,$r,$i,$t,$u,@input); | ||||
| 	 | ||||
| 	@input=unpack("C8",$in); | ||||
| 	# Get the bytes in the order we want. | ||||
|   | ||||
| @@ -496,7 +496,13 @@ of fun ways to implement one-way encryption of a text string. | ||||
| .PP | ||||
| The routines are optimised for 32 bit machines and so are not efficient | ||||
| on IBM PCs. | ||||
| .PP | ||||
| NOTE: extensive work has been done on this library since this document | ||||
| was origionally written.  Please try to read des.doc from the libdes | ||||
| distribution since it is far more upto date and documents more of the | ||||
| functions.  Libdes is now also being shipped as part of SSLeay, a | ||||
| general cryptographic library that amonst other things implements | ||||
| netscapes SSL protocoll.  The most recent version can be found in | ||||
| SSLeay distributions. | ||||
| .SH AUTHOR | ||||
| Eric Young (eay@psych.psy.uq.oz.au), | ||||
| Psychology Department, | ||||
| University of Queensland, Australia. | ||||
| Eric Young (eay@mincom.oz.au or eay@psych.psy.uq.oz.au) | ||||
|   | ||||
| @@ -1,24 +1,127 @@ | ||||
| /* des_locl.h */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
|  | ||||
| #ifndef __des_locl_h | ||||
| #define __des_locl_h | ||||
|  | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "config.h" | ||||
| #include "protos.h" | ||||
|  | ||||
| /* | ||||
|   if (we have termios.h) | ||||
|     define TERMIOS | ||||
|   else if (we have termio.h) | ||||
|     define TERMIO | ||||
| */ | ||||
| #ifdef HAVE_TERMIOS_H | ||||
|  | ||||
| #define TERMIOS | ||||
|  | ||||
| #else /* !HAVE_TERMIOS_H */ | ||||
|  | ||||
| #ifdef HAVE_TERMIO_H | ||||
| #define TERMIO | ||||
| #endif | ||||
|  | ||||
| #endif /* !HAVE_TERMIOS_H */ | ||||
|  | ||||
| #endif /* HAVE_CONFIG_H */ | ||||
|  | ||||
| /* lib/des/des_locl.h */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #ifndef HEADER_DES_LOCL_H | ||||
| #define HEADER_DES_LOCL_H | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/types.h> | ||||
| #include <memory.h> | ||||
|  | ||||
| #ifndef MSDOS | ||||
| #include <unistd.h> | ||||
| #include <sys/stat.h> | ||||
| #include <fcntl.h> | ||||
| #include <time.h> | ||||
|  | ||||
| #endif | ||||
| #include "des.h" | ||||
|  | ||||
| /* 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 | ||||
| #endif | ||||
|  | ||||
| #ifdef MSDOS		/* Visual C++ 2.1 (Windows NT/95) */ | ||||
| #include <stdlib.h> | ||||
| #include <time.h> | ||||
| #include <io.h> | ||||
| #define RAND | ||||
| #undef PROTO | ||||
| #define PROTO | ||||
| #endif | ||||
|  | ||||
| #if defined(__STDC__) || defined(VMS) || defined(M_XENIX) || defined(MSDOS) | ||||
| #include <string.h> | ||||
| #endif | ||||
|  | ||||
| #ifndef RAND | ||||
| #define RAND | ||||
| #endif | ||||
|  | ||||
| #ifdef MSDOS | ||||
| #define getpid() 2 | ||||
| extern int errno; | ||||
| #define RAND | ||||
| #undef PROTO | ||||
| #define PROTO | ||||
| #endif | ||||
|  | ||||
| #if defined(NOCONST) | ||||
| #define const | ||||
| #endif | ||||
|  | ||||
| #ifdef __STDC__ | ||||
| #undef PROTO | ||||
| #define PROTO | ||||
| #endif | ||||
|  | ||||
| #ifdef RAND | ||||
| #define srandom(s) srand(s) | ||||
| #define random rand | ||||
| #endif | ||||
|  | ||||
| #define ITERATIONS 16 | ||||
| #define HALF_ITERATIONS 8 | ||||
|  | ||||
| @@ -26,58 +129,58 @@ | ||||
| #define MAXWRITE	(1024*16) | ||||
| #define BSIZE		(MAXWRITE+4) | ||||
|  | ||||
| #define c2l(c,l)	(l =((u_int32_t)(*((c)++)))    , \ | ||||
| 			 l|=((u_int32_t)(*((c)++)))<< 8, \ | ||||
| 			 l|=((u_int32_t)(*((c)++)))<<16, \ | ||||
| 			 l|=((u_int32_t)(*((c)++)))<<24) | ||||
| #define c2l(c,l)	(l =((unsigned long)(*((c)++)))    , \ | ||||
| 			 l|=((unsigned long)(*((c)++)))<< 8L, \ | ||||
| 			 l|=((unsigned long)(*((c)++)))<<16L, \ | ||||
| 			 l|=((unsigned 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|=((u_int32_t)(*(--(c))))<<24; \ | ||||
| 			case 7: l2|=((u_int32_t)(*(--(c))))<<16; \ | ||||
| 			case 6: l2|=((u_int32_t)(*(--(c))))<< 8; \ | ||||
| 			case 5: l2|=((u_int32_t)(*(--(c))));     \ | ||||
| 			case 4: l1|=((u_int32_t)(*(--(c))))<<24; \ | ||||
| 			case 3: l1|=((u_int32_t)(*(--(c))))<<16; \ | ||||
| 			case 2: l1|=((u_int32_t)(*(--(c))))<< 8; \ | ||||
| 			case 1: l1|=((u_int32_t)(*(--(c))));     \ | ||||
| 			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))));     \ | ||||
| 				} \ | ||||
| 			} | ||||
|  | ||||
| #define l2c(l,c)	(*((c)++)=(unsigned char)(((l)    )&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>>24)&0xff)) | ||||
| #define l2c(l,c)	(*((c)++)=(unsigned char)(((l)     )&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>>24L)&0xff)) | ||||
|  | ||||
| /* replacements for htonl and ntohl since I have no idea what to do | ||||
|  * when faced with machines with 8 byte longs. */ | ||||
| #define HDRSIZE 4 | ||||
|  | ||||
| #define n2l(c,l)	(l =((u_int32_t)(*((c)++)))<<24, \ | ||||
| 			 l|=((u_int32_t)(*((c)++)))<<16, \ | ||||
| 			 l|=((u_int32_t)(*((c)++)))<< 8, \ | ||||
| 			 l|=((u_int32_t)(*((c)++)))) | ||||
| #define n2l(c,l)	(l =((unsigned long)(*((c)++)))<<24L, \ | ||||
| 			 l|=((unsigned long)(*((c)++)))<<16L, \ | ||||
| 			 l|=((unsigned long)(*((c)++)))<< 8L, \ | ||||
| 			 l|=((unsigned long)(*((c)++)))) | ||||
|  | ||||
| #define l2n(l,c)	(*((c)++)=(unsigned char)(((l)>>24)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>>16)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)    )&0xff)) | ||||
| #define l2n(l,c)	(*((c)++)=(unsigned char)(((l)>>24L)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>>16L)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \ | ||||
| 			 *((c)++)=(unsigned char)(((l)     )&0xff)) | ||||
|  | ||||
| /* NOTE - c is not incremented as per l2c */ | ||||
| #define l2cn(l1,l2,c,n)	{ \ | ||||
| 			c+=n; \ | ||||
| 			switch (n) { \ | ||||
| 			case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \ | ||||
| 			case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \ | ||||
| 			case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \ | ||||
| 			case 5: *(--(c))=(unsigned char)(((l2)    )&0xff); \ | ||||
| 			case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \ | ||||
| 			case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \ | ||||
| 			case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \ | ||||
| 			case 1: *(--(c))=(unsigned char)(((l1)    )&0xff); \ | ||||
| 			case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \ | ||||
| 			case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \ | ||||
| 			case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \ | ||||
| 			case 5: *(--(c))=(unsigned char)(((l2)     )&0xff); \ | ||||
| 			case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \ | ||||
| 			case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \ | ||||
| 			case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \ | ||||
| 			case 1: *(--(c))=(unsigned char)(((l1)     )&0xff); \ | ||||
| 				} \ | ||||
| 			} | ||||
|  | ||||
| @@ -85,27 +188,27 @@ | ||||
|  * compiler and the achitecture.  gcc2 always seems to do well :-). | ||||
|  * Inspired by Dana How <how@isl.stanford.edu> | ||||
|  * DO NOT use the alternative version on machines with 8 byte longs. */ | ||||
| #ifdef ALT_ECB | ||||
| #define D_ENCRYPT(L,R,S) \ | ||||
| #ifdef DES_USR_PTR | ||||
| #define D_ENCRYPT(L,R,S) { \ | ||||
| 	u=((R^s[S  ])<<2);	\ | ||||
| 	t= R^s[S+1]; \ | ||||
| 	t=((t>>2)+(t<<30)); \ | ||||
| 	L^= \ | ||||
| 	*(u_int32_t *)(des_SP+0x0100+((t    )&0xfc))+ \ | ||||
| 	*(u_int32_t *)(des_SP+0x0300+((t>> 8)&0xfc))+ \ | ||||
| 	*(u_int32_t *)(des_SP+0x0500+((t>>16)&0xfc))+ \ | ||||
| 	*(u_int32_t *)(des_SP+0x0700+((t>>24)&0xfc))+ \ | ||||
| 	*(u_int32_t *)(des_SP+       ((u    )&0xfc))+ \ | ||||
|   	*(u_int32_t *)(des_SP+0x0200+((u>> 8)&0xfc))+ \ | ||||
|   	*(u_int32_t *)(des_SP+0x0400+((u>>16)&0xfc))+ \ | ||||
|  	*(u_int32_t *)(des_SP+0x0600+((u>>24)&0xfc)); | ||||
| 	*(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)); } | ||||
| #else /* original version */ | ||||
| #ifdef MSDOS | ||||
| #define D_ENCRYPT(L,R,S)	\ | ||||
| 	U.l=R^s[S+1]; \ | ||||
| 	T.s[0]=((U.s[0]>>4)|(U.s[1]<<12))&0x3f3f; \ | ||||
| 	T.s[1]=((U.s[1]>>4)|(U.s[0]<<12))&0x3f3f; \ | ||||
| 	U.l=(R^s[S  ])&0x3f3f3f3f; \ | ||||
| 	U.l=(R^s[S  ])&0x3f3f3f3fL; \ | ||||
| 	L^=	des_SPtrans[1][(T.c[0])]| \ | ||||
| 		des_SPtrans[3][(T.c[1])]| \ | ||||
| 		des_SPtrans[5][(T.c[2])]| \ | ||||
| @@ -115,18 +218,18 @@ | ||||
| 		des_SPtrans[4][(U.c[2])]| \ | ||||
| 		des_SPtrans[6][(U.c[3])]; | ||||
| #else | ||||
| #define D_ENCRYPT(L,R,S)	\ | ||||
| #define D_ENCRYPT(Q,R,S) {\ | ||||
| 	u=(R^s[S  ]); \ | ||||
| 	t=R^s[S+1]; \ | ||||
| 	t=((t>>4)+(t<<28)); \ | ||||
| 	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]; | ||||
| 	t=((t>>4L)+(t<<28L)); \ | ||||
| 	Q^=	des_SPtrans[1][(t     )&0x3f]| \ | ||||
| 		des_SPtrans[3][(t>> 8L)&0x3f]| \ | ||||
| 		des_SPtrans[5][(t>>16L)&0x3f]| \ | ||||
| 		des_SPtrans[7][(t>>24L)&0x3f]| \ | ||||
| 		des_SPtrans[0][(u     )&0x3f]| \ | ||||
| 		des_SPtrans[2][(u>> 8L)&0x3f]| \ | ||||
| 		des_SPtrans[4][(u>>16L)&0x3f]| \ | ||||
| 		des_SPtrans[6][(u>>24L)&0x3f]; } | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| @@ -171,5 +274,23 @@ | ||||
| 	(b)^=(t),\ | ||||
| 	(a)^=((t)<<(n))) | ||||
|  | ||||
| #define IP(l,r) \ | ||||
| 	{ \ | ||||
| 	register unsigned long tt; \ | ||||
| 	PERM_OP(r,l,tt, 4,0x0f0f0f0fL); \ | ||||
| 	PERM_OP(l,r,tt,16,0x0000ffffL); \ | ||||
| 	PERM_OP(r,l,tt, 2,0x33333333L); \ | ||||
| 	PERM_OP(l,r,tt, 8,0x00ff00ffL); \ | ||||
| 	PERM_OP(r,l,tt, 1,0x55555555L); \ | ||||
| 	} | ||||
|  | ||||
| #endif /*  __des_locl_h */ | ||||
| #define FP(l,r) \ | ||||
| 	{ \ | ||||
| 	register unsigned long tt; \ | ||||
| 	PERM_OP(l,r,tt, 1,0x55555555L); \ | ||||
| 	PERM_OP(r,l,tt, 8,0x00ff00ffL); \ | ||||
| 	PERM_OP(l,r,tt, 2,0x33333333L); \ | ||||
| 	PERM_OP(r,l,tt,16,0x0000ffffL); \ | ||||
| 	PERM_OP(l,r,tt, 4,0x0f0f0f0fL); \ | ||||
| 	} | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										1097
									
								
								lib/des/destest.c
									
									
									
									
									
								
							
							
						
						
									
										1097
									
								
								lib/des/destest.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										77
									
								
								lib/des/ecb3_enc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								lib/des/ecb3_enc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| /* lib/des/ecb3_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| void des_ecb3_encrypt(input, output, ks1, ks2, ks3, encrypt) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| des_key_schedule ks1; | ||||
| des_key_schedule ks2; | ||||
| des_key_schedule ks3; | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	register unsigned long l0,l1; | ||||
| 	register unsigned char *in,*out; | ||||
| 	unsigned long ll[2]; | ||||
|  | ||||
| 	in=(unsigned char *)input; | ||||
| 	out=(unsigned char *)output; | ||||
| 	c2l(in,l0); | ||||
| 	c2l(in,l1); | ||||
| 	IP(l0,l1); | ||||
| 	ll[0]=l0; | ||||
| 	ll[1]=l1; | ||||
| 	des_encrypt2(ll,ks1,encrypt); | ||||
| 	des_encrypt2(ll,ks2,!encrypt); | ||||
| 	des_encrypt2(ll,ks3,encrypt); | ||||
| 	l0=ll[0]; | ||||
| 	l1=ll[1]; | ||||
| 	FP(l1,l0); | ||||
| 	l2c(l0,out); | ||||
| 	l2c(l1,out); | ||||
| 	} | ||||
| @@ -1,110 +1,203 @@ | ||||
| /* ecb_enc.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/ecb_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
| #include "spr.h" | ||||
|  | ||||
| int des_ecb_encrypt(des_cblock (*input), des_cblock (*output), struct des_ks_struct *ks, int encrypt) | ||||
| { | ||||
|   register u_int32_t l0,l1; | ||||
|   register unsigned char *in,*out; | ||||
|   u_int32_t ll[2]; | ||||
| const char *DES_version="libdes v 3.21 - 95/11/21 - eay"; | ||||
|  | ||||
|   in=(unsigned char *)input; | ||||
|   out=(unsigned char *)output; | ||||
|   c2l(in,l0); | ||||
|   c2l(in,l1); | ||||
|   ll[0]=l0; | ||||
|   ll[1]=l1; | ||||
|   des_encrypt(ll,ll,ks,encrypt); | ||||
|   l0=ll[0]; | ||||
|   l1=ll[1]; | ||||
|   l2c(l0,out); | ||||
|   l2c(l1,out); | ||||
|   l0=l1=ll[0]=ll[1]=0; | ||||
|   return(0); | ||||
| } | ||||
| void des_ecb_encrypt(input, output, ks, encrypt) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| des_key_schedule ks; | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	register unsigned long l0,l1; | ||||
| 	register unsigned char *in,*out; | ||||
| 	unsigned long ll[2]; | ||||
|  | ||||
| int des_encrypt(u_int32_t *input, u_int32_t *output, struct des_ks_struct *ks, int encrypt) | ||||
| { | ||||
|   register u_int32_t l,r,t,u; | ||||
| #ifdef ALT_ECB | ||||
|   register unsigned char *des_SP=(unsigned char *)des_SPtrans; | ||||
| 	in=(unsigned char *)input; | ||||
| 	out=(unsigned char *)output; | ||||
| 	c2l(in,l0); ll[0]=l0; | ||||
| 	c2l(in,l1); ll[1]=l1; | ||||
| 	des_encrypt(ll,ks,encrypt); | ||||
| 	l0=ll[0]; l2c(l0,out); | ||||
| 	l1=ll[1]; l2c(l1,out); | ||||
| 	l0=l1=ll[0]=ll[1]=0; | ||||
| 	} | ||||
|  | ||||
| void des_encrypt(data, ks, encrypt) | ||||
| unsigned long *data; | ||||
| des_key_schedule ks; | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	register unsigned long l,r,t,u; | ||||
| #ifdef DES_USE_PTR | ||||
| 	register unsigned char *des_SP=(unsigned char *)des_SPtrans; | ||||
| #endif | ||||
| #ifdef MSDOS | ||||
|   union fudge { | ||||
|     u_int32_t  l; | ||||
|     unsigned short s[2]; | ||||
|     unsigned char  c[4]; | ||||
|   } U,T; | ||||
| 	union fudge { | ||||
| 		unsigned long  l; | ||||
| 		unsigned short s[2]; | ||||
| 		unsigned char  c[4]; | ||||
| 		} U,T; | ||||
| #endif | ||||
|   register int i; | ||||
|   register u_int32_t *s; | ||||
| 	register int i; | ||||
| 	register unsigned long *s; | ||||
|  | ||||
|   l=input[0]; | ||||
|   r=input[1]; | ||||
| 	u=data[0]; | ||||
| 	r=data[1]; | ||||
|  | ||||
|   /* do IP */ | ||||
|   PERM_OP(r,l,t, 4,0x0f0f0f0f); | ||||
|   PERM_OP(l,r,t,16,0x0000ffff); | ||||
|   PERM_OP(r,l,t, 2,0x33333333); | ||||
|   PERM_OP(l,r,t, 8,0x00ff00ff); | ||||
|   PERM_OP(r,l,t, 1,0x55555555); | ||||
|   /* r and l are reversed - remember that :-) - fix | ||||
|    * it in the next step */ | ||||
| 	IP(u,r); | ||||
| 	/* Things have been modified so that the initial rotate is | ||||
| 	 * done outside the loop.  This required the | ||||
| 	 * des_SPtrans values in sp.h to be rotated 1 bit to the right. | ||||
| 	 * One perl script later and things have a 5% speed up on a sparc2. | ||||
| 	 * Thanks to Richard Outerbridge <71755.204@CompuServe.COM> | ||||
| 	 * for pointing this out. */ | ||||
| 	l=(r<<1)|(r>>31); | ||||
| 	r=(u<<1)|(u>>31); | ||||
|  | ||||
|   /* Things have been modified so that the initial rotate is | ||||
|    * done outside the loop.  This required the | ||||
|    * des_SPtrans values in sp.h to be rotated 1 bit to the right. | ||||
|    * One perl script later and things have a 5% speed up on a sparc2. | ||||
|    * Thanks to Richard Outerbridge <71755.204@CompuServe.COM> | ||||
|    * for pointing this out. */ | ||||
|   t=(r<<1)|(r>>31); | ||||
|   r=(l<<1)|(l>>31); | ||||
|   l=t; | ||||
| 	/* clear the top bits on machines with 8byte longs */ | ||||
| 	l&=0xffffffffL; | ||||
| 	r&=0xffffffffL; | ||||
|  | ||||
|   /* clear the top bits on machines with 8byte longs */ | ||||
|   l&=0xffffffff; | ||||
|   r&=0xffffffff; | ||||
| 	s=(unsigned 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) | ||||
| 			{ | ||||
| 			D_ENCRYPT(l,r,i+0); /*  1 */ | ||||
| 			D_ENCRYPT(r,l,i+2); /*  2 */ | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		for (i=30; i>0; i-=4) | ||||
| 			{ | ||||
| 			D_ENCRYPT(l,r,i-0); /* 16 */ | ||||
| 			D_ENCRYPT(r,l,i-2); /* 15 */ | ||||
| 			} | ||||
| 		} | ||||
| 	l=(l>>1)|(l<<31); | ||||
| 	r=(r>>1)|(r<<31); | ||||
| 	/* clear the top bits on machines with 8byte longs */ | ||||
| 	l&=0xffffffffL; | ||||
| 	r&=0xffffffffL; | ||||
|  | ||||
|   s=(u_int32_t *)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) | ||||
| 	{ | ||||
| 	  D_ENCRYPT(l,r,i+0);	/*  1 */ | ||||
| 	  D_ENCRYPT(r,l,i+2);	/*  2 */ | ||||
| 	FP(r,l); | ||||
| 	data[0]=l; | ||||
| 	data[1]=r; | ||||
| 	l=r=t=u=0; | ||||
| 	} | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       for (i=30; i>0; i-=4) | ||||
|  | ||||
| void des_encrypt2(data, ks, encrypt) | ||||
| unsigned long *data; | ||||
| des_key_schedule ks; | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	  D_ENCRYPT(l,r,i-0);	/* 16 */ | ||||
| 	  D_ENCRYPT(r,l,i-2);	/* 15 */ | ||||
| 	register unsigned long l,r,t,u; | ||||
| #ifdef DES_USE_PTR | ||||
| 	register unsigned char *des_SP=(unsigned char *)des_SPtrans; | ||||
| #endif | ||||
| #ifdef MSDOS | ||||
| 	union fudge { | ||||
| 		unsigned long  l; | ||||
| 		unsigned short s[2]; | ||||
| 		unsigned char  c[4]; | ||||
| 		} U,T; | ||||
| #endif | ||||
| 	register int i; | ||||
| 	register unsigned long *s; | ||||
|  | ||||
| 	u=data[0]; | ||||
| 	r=data[1]; | ||||
|  | ||||
| 	/* Things have been modified so that the initial rotate is | ||||
| 	 * done outside the loop.  This required the | ||||
| 	 * des_SPtrans values in sp.h to be rotated 1 bit to the right. | ||||
| 	 * One perl script later and things have a 5% speed up on a sparc2. | ||||
| 	 * Thanks to Richard Outerbridge <71755.204@CompuServe.COM> | ||||
| 	 * for pointing this out. */ | ||||
| 	l=(r<<1)|(r>>31); | ||||
| 	r=(u<<1)|(u>>31); | ||||
|  | ||||
| 	/* clear the top bits on machines with 8byte longs */ | ||||
| 	l&=0xffffffffL; | ||||
| 	r&=0xffffffffL; | ||||
|  | ||||
| 	s=(unsigned 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) | ||||
| 			{ | ||||
| 			D_ENCRYPT(l,r,i+0); /*  1 */ | ||||
| 			D_ENCRYPT(r,l,i+2); /*  2 */ | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		for (i=30; i>0; i-=4) | ||||
| 			{ | ||||
| 			D_ENCRYPT(l,r,i-0); /* 16 */ | ||||
| 			D_ENCRYPT(r,l,i-2); /* 15 */ | ||||
| 			} | ||||
| 		} | ||||
| 	l=(l>>1)|(l<<31); | ||||
| 	r=(r>>1)|(r<<31); | ||||
| 	/* clear the top bits on machines with 8byte longs */ | ||||
| 	l&=0xffffffffL; | ||||
| 	r&=0xffffffffL; | ||||
|  | ||||
| 	data[0]=l; | ||||
| 	data[1]=r; | ||||
| 	l=r=t=u=0; | ||||
| 	} | ||||
|     } | ||||
|   l=(l>>1)|(l<<31); | ||||
|   r=(r>>1)|(r<<31); | ||||
|   /* clear the top bits on machines with 8byte longs */ | ||||
|   l&=0xffffffff; | ||||
|   r&=0xffffffff; | ||||
|  | ||||
|   /* swap l and r | ||||
|    * we will not do the swap so just remember they are | ||||
|    * reversed for the rest of the subroutine | ||||
|    * luckily FP fixes this problem :-) */ | ||||
|  | ||||
|   PERM_OP(r,l,t, 1,0x55555555); | ||||
|   PERM_OP(l,r,t, 8,0x00ff00ff); | ||||
|   PERM_OP(r,l,t, 2,0x33333333); | ||||
|   PERM_OP(l,r,t,16,0x0000ffff); | ||||
|   PERM_OP(r,l,t, 4,0x0f0f0f0f); | ||||
|  | ||||
|   output[0]=l; | ||||
|   output[1]=r; | ||||
|   l=r=t=u=0; | ||||
|   return(0); | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										163
									
								
								lib/des/ede_enc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								lib/des/ede_enc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| /* lib/des/ede_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| void des_ede3_cbc_encrypt(input, output, length, ks1, ks2, ks3, ivec, encrypt) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| des_key_schedule ks1; | ||||
| des_key_schedule ks2; | ||||
| des_key_schedule ks3; | ||||
| des_cblock (*ivec); | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	register unsigned long tin0,tin1; | ||||
| 	register unsigned long tout0,tout1,xor0,xor1; | ||||
| 	register unsigned char *in,*out; | ||||
| 	register long l=length; | ||||
| 	unsigned long tin[2]; | ||||
| 	unsigned char *iv; | ||||
|  | ||||
| 	in=(unsigned char *)input; | ||||
| 	out=(unsigned char *)output; | ||||
| 	iv=(unsigned char *)ivec; | ||||
|  | ||||
| 	if (encrypt) | ||||
| 		{ | ||||
| 		c2l(iv,tout0); | ||||
| 		c2l(iv,tout1); | ||||
| 		for (; l>0; l-=8) | ||||
| 			{ | ||||
| 			if (l >= 8) | ||||
| 				{ | ||||
| 				c2l(in,tin0); | ||||
| 				c2l(in,tin1); | ||||
| 				} | ||||
| 			else | ||||
| 				c2ln(in,tin0,tin1,l); | ||||
| 			tin0^=tout0; | ||||
| 			tin1^=tout1; | ||||
|  | ||||
| 			IP(tin0,tin1); | ||||
|  | ||||
| 			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); | ||||
| 			tout0=tin[0]; | ||||
| 			tout1=tin[1]; | ||||
|  | ||||
| 			FP(tout1,tout0); | ||||
|  | ||||
| 			l2c(tout0,out); | ||||
| 			l2c(tout1,out); | ||||
| 			} | ||||
| 		iv=(unsigned char *)ivec; | ||||
| 		l2c(tout0,iv); | ||||
| 		l2c(tout1,iv); | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		c2l(iv,xor0); | ||||
| 		c2l(iv,xor1); | ||||
| 		for (; l>0; l-=8) | ||||
| 			{ | ||||
| 			register unsigned long t0,t1; | ||||
|  | ||||
| 			c2l(in,tin0); | ||||
| 			c2l(in,tin1); | ||||
|  | ||||
| 			t0=tin0; | ||||
| 			t1=tin1; | ||||
| 			IP(tin0,tin1);   | ||||
|  | ||||
| 			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); | ||||
| 			tout0=tin[0]; | ||||
| 			tout1=tin[1]; | ||||
|  | ||||
| 			FP(tout1,tout0); /**/ | ||||
|  | ||||
| 			tout0^=xor0; | ||||
| 			tout1^=xor1; | ||||
| 			if (l >= 8) | ||||
| 				{ | ||||
| 				l2c(tout0,out); | ||||
| 				l2c(tout1,out); | ||||
| 				} | ||||
| 			else | ||||
| 				l2cn(tout0,tout1,out,l); | ||||
| 			xor0=t0; | ||||
| 			xor1=t1; | ||||
| 			} | ||||
| 		iv=(unsigned char *)ivec; | ||||
| 		l2c(xor0,iv); | ||||
| 		l2c(xor1,iv); | ||||
| 		} | ||||
| 	tin0=tin1=tout0=tout1=xor0=xor1=0; | ||||
| 	tin[0]=tin[1]=0; | ||||
| 	} | ||||
|  | ||||
| #ifdef undef /* MACRO */ | ||||
| void des_ede2_cbc_encrypt(input, output, length, ks1, ks2, ivec, enc) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| des_key_schedule ks1; | ||||
| des_key_schedule ks2; | ||||
| des_cblock (*ivec); | ||||
| int enc; | ||||
| 	{ | ||||
| 	des_ede3_cbc_encrypt(input,output,length,ks1,ks2,ks1,ivec,enc); | ||||
| 	} | ||||
| #endif | ||||
| @@ -1,157 +1,189 @@ | ||||
| /* enc_read.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/enc_read.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <stdio.h> | ||||
| #include <errno.h> | ||||
| #include "des_locl.h" | ||||
|  | ||||
| int LEFT_JUSTIFIED = 0; | ||||
|  | ||||
| /* This has some uglies in it but it works - even over sockets. */ | ||||
| extern int errno; | ||||
| int des_rw_mode=DES_PCBC_MODE; | ||||
|  | ||||
| int des_enc_read(int fd, char *buf, int len, struct des_ks_struct *sched, des_cblock (*iv)) | ||||
| { | ||||
|   /* data to be unencrypted */ | ||||
|   int net_num=0; | ||||
|   unsigned char net[BSIZE]; | ||||
|   /* 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 int unnet_start=0; | ||||
|   static int unnet_left=0; | ||||
|   int i; | ||||
|   long num=0,rnum; | ||||
|   unsigned char *p; | ||||
|  | ||||
|   /* left over data from last decrypt */ | ||||
|   if (unnet_left != 0) | ||||
|     { | ||||
|       if (unnet_left < len) | ||||
| int des_enc_read(fd, buf, len, sched, iv) | ||||
| int fd; | ||||
| char *buf; | ||||
| int len; | ||||
| des_key_schedule sched; | ||||
| des_cblock (*iv); | ||||
| 	{ | ||||
| 	  /* we still still need more data but will return | ||||
| 	   * with the number of bytes we have - should always | ||||
| 	   * check the return value */ | ||||
| 	  memcpy(buf,&(unnet[unnet_start]),unnet_left); | ||||
| 	  /* eay 26/08/92 I had the next 2 lines | ||||
| 	   * reversed :-( */ | ||||
| 	  i=unnet_left; | ||||
| 	  unnet_start=unnet_left=0; | ||||
| 	/* data to be unencrypted */ | ||||
| 	int net_num=0; | ||||
| 	unsigned char net[BSIZE]; | ||||
| 	/* 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 int unnet_start=0; | ||||
| 	static int unnet_left=0; | ||||
| 	int i; | ||||
| 	long num=0,rnum; | ||||
| 	unsigned char *p; | ||||
|  | ||||
| 	/* left over data from last decrypt */ | ||||
| 	if (unnet_left != 0) | ||||
| 		{ | ||||
| 		if (unnet_left < len) | ||||
| 			{ | ||||
| 			/* we still still need more data but will return | ||||
| 			 * with the number of bytes we have - should always | ||||
| 			 * check the return value */ | ||||
| 			memcpy(buf,&(unnet[unnet_start]), | ||||
| 				(unsigned int)unnet_left); | ||||
| 			/* eay 26/08/92 I had the next 2 lines | ||||
| 			 * reversed :-( */ | ||||
| 			i=unnet_left; | ||||
| 			unnet_start=unnet_left=0; | ||||
| 			} | ||||
| 		else | ||||
| 			{ | ||||
| 			memcpy(buf,&(unnet[unnet_start]),(unsigned int)len); | ||||
| 			unnet_start+=len; | ||||
| 			unnet_left-=len; | ||||
| 			i=len; | ||||
| 			} | ||||
| 		return(i); | ||||
| 		} | ||||
|  | ||||
| 	/* We need to get more data. */ | ||||
| 	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); | ||||
| 		if ((i == -1) && (errno == EINTR)) continue; | ||||
| 		if (i <= 0) return(0); | ||||
| 		net_num+=i; | ||||
| 		} | ||||
|  | ||||
| 	/* we now have at net_num bytes in net */ | ||||
| 	p=net; | ||||
| 	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. | ||||
| 	 */ | ||||
| 	if ((num > MAXWRITE) || (num < 0)) /* error */ | ||||
| 		return(-1); | ||||
| 	rnum=(num < 8)?8:((num+7)/8*8); | ||||
|  | ||||
| 	net_num=0; | ||||
| 	while (net_num < rnum) | ||||
| 		{ | ||||
| 		i=read(fd,&(net[net_num]),(unsigned int)rnum-net_num); | ||||
| 		if ((i == -1) && (errno == EINTR)) continue; | ||||
| 		if (i <= 0) return(0); | ||||
| 		net_num+=i; | ||||
| 		} | ||||
|  | ||||
| 	/* Check if there will be data left over. */ | ||||
| 	if (len < num) | ||||
| 		{ | ||||
| 		if (des_rw_mode & DES_PCBC_MODE) | ||||
| 			pcbc_encrypt((des_cblock *)net,(des_cblock *)unnet, | ||||
| 				num,sched,iv,DES_DECRYPT); | ||||
| 		else | ||||
| 			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; | ||||
|  | ||||
| 		/* The following line is done because we return num | ||||
| 		 * as the number of bytes read. */ | ||||
| 		num=len; | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		/* >output is a multiple of 8 byes, if len < rnum | ||||
| 		 * >we must be careful.  The user must be aware that this | ||||
| 		 * >routine will write more bytes than he asked for. | ||||
| 		 * >The length of the buffer must be correct. | ||||
| 		 * 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_cblock *)tmpbuf, | ||||
| 					num,sched,iv,DES_DECRYPT); | ||||
| 			else | ||||
| 				cbc_encrypt((des_cblock *)net, | ||||
| 					(des_cblock *)tmpbuf, | ||||
| 					num,sched,iv,DES_DECRYPT); | ||||
|  | ||||
| 			/* eay 26/08/92 fix a bug that returned more | ||||
| 			 * bytes than you asked for (returned len bytes :-( */ | ||||
| 			memcpy(buf,tmpbuf,(unsigned int)num); | ||||
| 			} | ||||
| 		else | ||||
| 			{ | ||||
| 			if (des_rw_mode & DES_PCBC_MODE) | ||||
| 				pcbc_encrypt((des_cblock *)net, | ||||
| 					(des_cblock *)buf,num,sched,iv, | ||||
| 					DES_DECRYPT); | ||||
| 			else | ||||
| 				cbc_encrypt((des_cblock *)net, | ||||
| 					(des_cblock *)buf,num,sched,iv, | ||||
| 					DES_DECRYPT); | ||||
| 			} | ||||
| 		} | ||||
| 	return(num); | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
| 	  memcpy(buf,&(unnet[unnet_start]),len); | ||||
| 	  unnet_start+=len; | ||||
| 	  unnet_left-=len; | ||||
| 	  i=len; | ||||
| 	} | ||||
|       return(i); | ||||
|     } | ||||
|  | ||||
|   /* We need to get more data. */ | ||||
|   if (len > MAXWRITE) len=MAXWRITE; | ||||
|  | ||||
|   /* first - get the length */ | ||||
|   net_num=0; | ||||
|   while (net_num < HDRSIZE)  | ||||
|     { | ||||
|       i=read(fd,&(net[net_num]),HDRSIZE-net_num); | ||||
|       if ((i == -1) && (errno == EINTR)) continue; | ||||
|       if (i <= 0) return(0); | ||||
|       net_num+=i; | ||||
|     } | ||||
|  | ||||
|   /* we now have at net_num bytes in net */ | ||||
|   p=net; | ||||
|   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. | ||||
|    */ | ||||
|   if ((num > MAXWRITE) || (num < 0)) /* error */ | ||||
|     return(-1); | ||||
|   rnum=(num < 8)?8:((num+7)/8*8); | ||||
|  | ||||
|   net_num=0; | ||||
|   while (net_num < rnum) | ||||
|     { | ||||
|       i=read(fd,&(net[net_num]),rnum-net_num); | ||||
|       if ((i == -1) && (errno == EINTR)) continue; | ||||
|       if (i <= 0) return(0); | ||||
|       net_num+=i; | ||||
|     } | ||||
|  | ||||
|   /* Check if there will be data left over. */ | ||||
|   if (len < num) | ||||
|     { | ||||
|       if (des_rw_mode & DES_PCBC_MODE) | ||||
| 	des_pcbc_encrypt((des_cblock *)net,(des_cblock *)unnet, | ||||
| 		     num,sched,iv,DES_DECRYPT); | ||||
|       else | ||||
| 	des_cbc_encrypt((des_cblock *)net,(des_cblock *)unnet, | ||||
| 		    num,sched,iv,DES_DECRYPT); | ||||
|       memcpy(buf,unnet,len); | ||||
|       unnet_start=len; | ||||
|       unnet_left=num-len; | ||||
|  | ||||
|       /* The following line is done because we return num | ||||
|        * as the number of bytes read. */ | ||||
|       num=len; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       /* >output is a multiple of 8 byes, if len < rnum | ||||
|        * >we must be careful.  The user must be aware that this | ||||
|        * >routine will write more bytes than he asked for. | ||||
|        * >The length of the buffer must be correct. | ||||
|        * FIXED - Should be ok now 18-9-90 - eay */ | ||||
|       if (len < rnum) | ||||
| 	{ | ||||
| 	  char tmpbuf[BSIZE]; | ||||
|  | ||||
| 	  if (des_rw_mode & DES_PCBC_MODE) | ||||
| 	    des_pcbc_encrypt((des_cblock *)net, | ||||
| 			 (des_cblock *)tmpbuf, | ||||
| 			 num,sched,iv,DES_DECRYPT); | ||||
| 	  else | ||||
| 	    des_cbc_encrypt((des_cblock *)net, | ||||
| 			(des_cblock *)tmpbuf, | ||||
| 			num,sched,iv,DES_DECRYPT); | ||||
|  | ||||
| 	  /* eay 26/08/92 fix a bug that returned more | ||||
| 	   * bytes than you asked for (returned len bytes :-( */ | ||||
| 	  if (LEFT_JUSTIFIED || (len >= 8)) | ||||
| 	      memcpy(buf,tmpbuf,num); | ||||
| 	  else | ||||
| 	      memcpy(buf,tmpbuf+(8-num),num); /* Right justified */ | ||||
| 	} | ||||
|       else if (num >= 8) | ||||
| 	{ | ||||
| 	  if (des_rw_mode & DES_PCBC_MODE) | ||||
| 	    des_pcbc_encrypt((des_cblock *)net, | ||||
| 			 (des_cblock *)buf,num,sched,iv, | ||||
| 			 DES_DECRYPT); | ||||
| 	  else | ||||
| 	    des_cbc_encrypt((des_cblock *)net, | ||||
| 			(des_cblock *)buf,num,sched,iv, | ||||
| 			DES_DECRYPT); | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
| 	  if (des_rw_mode & DES_PCBC_MODE) | ||||
| 	    des_pcbc_encrypt((des_cblock *)net, | ||||
| 			 (des_cblock *)buf,8,sched,iv, | ||||
| 			 DES_DECRYPT); | ||||
| 	  else | ||||
| 	    des_cbc_encrypt((des_cblock *)net, | ||||
| 			(des_cblock *)buf,8,sched,iv, | ||||
| 			DES_DECRYPT); | ||||
| 	  if (!LEFT_JUSTIFIED) | ||||
| 	      memcpy(buf, buf+(8-num), num); /* Right justified */ | ||||
| 	} | ||||
|     } | ||||
|   return(num); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,100 +1,142 @@ | ||||
| /* enc_writ.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/enc_writ.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <errno.h> | ||||
| #include <stdlib.h> | ||||
| #include <time.h> | ||||
| #include "des_locl.h" | ||||
|  | ||||
| extern int LEFT_JUSTIFIED; | ||||
|  | ||||
| int des_enc_write(int fd, char *buf, int len, struct des_ks_struct *sched, des_cblock (*iv)) | ||||
| { | ||||
|   long rnum; | ||||
|   int i,j,k,outnum; | ||||
|   char outbuf[BSIZE+HDRSIZE]; | ||||
|   char shortbuf[8]; | ||||
|   char *p; | ||||
|   static int start=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) | ||||
|     { | ||||
|       start=0; | ||||
|       srand(time(NULL)); | ||||
|     } | ||||
|  | ||||
|   /* lets recurse if we want to send the data in small chunks */ | ||||
|   if (len > MAXWRITE) | ||||
|     { | ||||
|       j=0; | ||||
|       for (i=0; i<len; i+=k) | ||||
| int des_enc_write(fd, buf, len, sched, iv) | ||||
| int fd; | ||||
| char *buf; | ||||
| int len; | ||||
| des_key_schedule sched; | ||||
| des_cblock (*iv); | ||||
| 	{ | ||||
| 	  k=des_enc_write(fd,&(buf[i]), | ||||
| 			  ((len-i) > MAXWRITE)?MAXWRITE:(len-i),sched,iv); | ||||
| 	  if (k < 0) | ||||
| 	    return(k); | ||||
| 	  else | ||||
| 	    j+=k; | ||||
| 	} | ||||
|       return(j); | ||||
|     } | ||||
| #ifdef _LIBC | ||||
| 	extern int srandom(); | ||||
| 	extern unsigned long time(); | ||||
| 	extern int random(); | ||||
| 	extern int write(); | ||||
| #endif | ||||
|  | ||||
|   /* write length first */ | ||||
|   p=outbuf; | ||||
|   l2n(len,p); | ||||
| 	long rnum; | ||||
| 	int i,j,k,outnum; | ||||
| 	char outbuf[BSIZE+HDRSIZE]; | ||||
| 	char shortbuf[8]; | ||||
| 	char *p; | ||||
| 	static int start=1; | ||||
|  | ||||
|   /* pad short strings */ | ||||
|   if (len < 8) | ||||
|     { | ||||
| 	if (LEFT_JUSTIFIED) | ||||
| 	    { | ||||
| 	/* 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) | ||||
| 		{ | ||||
| 		start=0; | ||||
| 		srandom((unsigned int)time(NULL)); | ||||
| 		} | ||||
|  | ||||
| 	/* lets recurse if we want to send the data in small chunks */ | ||||
| 	if (len > MAXWRITE) | ||||
| 		{ | ||||
| 		j=0; | ||||
| 		for (i=0; i<len; i+=k) | ||||
| 			{ | ||||
| 			k=des_enc_write(fd,&(buf[i]), | ||||
| 				((len-i) > MAXWRITE)?MAXWRITE:(len-i),sched,iv); | ||||
| 			if (k < 0) | ||||
| 				return(k); | ||||
| 			else | ||||
| 				j+=k; | ||||
| 			} | ||||
| 		return(j); | ||||
| 		} | ||||
|  | ||||
| 	/* write length first */ | ||||
| 	p=outbuf; | ||||
| 	l2n(len,p); | ||||
|  | ||||
| 	/* pad short strings */ | ||||
| 	if (len < 8) | ||||
| 		{ | ||||
| 		p=shortbuf; | ||||
| 		memcpy(shortbuf,buf,len); | ||||
| 		memcpy(shortbuf,buf,(unsigned int)len); | ||||
| 		for (i=len; i<8; i++) | ||||
| 		    shortbuf[i]=rand(); | ||||
| 			shortbuf[i]=random(); | ||||
| 		rnum=8; | ||||
| 	    } | ||||
| 		} | ||||
| 	else | ||||
| 	    { | ||||
| 		p=shortbuf; | ||||
| 		for (i=0; i<8-len; i++) | ||||
| 		    shortbuf[i]=rand(); | ||||
| 		memcpy(shortbuf + 8 - len, buf, len); | ||||
| 		rnum=8; | ||||
| 	    } | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       p=buf; | ||||
|       rnum=((len+7)/8*8);	/* round up to nearest eight */ | ||||
|     } | ||||
| 		{ | ||||
| 		p=buf; | ||||
| 		rnum=((len+7)/8*8); /* round up to nearest eight */ | ||||
| 		} | ||||
|  | ||||
|   if (des_rw_mode & DES_PCBC_MODE) | ||||
|     des_pcbc_encrypt((des_cblock *)p,(des_cblock *)&(outbuf[HDRSIZE]), | ||||
| 		 (long)((len<8)?8:len),sched,iv,DES_ENCRYPT);  | ||||
|   else | ||||
|     des_cbc_encrypt((des_cblock *)p,(des_cblock *)&(outbuf[HDRSIZE]), | ||||
| 		(long)((len<8)?8:len),sched,iv,DES_ENCRYPT);  | ||||
| 	if (des_rw_mode & DES_PCBC_MODE) | ||||
| 		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]), | ||||
| 			(long)((len<8)?8:len),sched,iv,DES_ENCRYPT);  | ||||
|  | ||||
|   /* output */ | ||||
|   outnum=rnum+HDRSIZE; | ||||
| 	/* output */ | ||||
| 	outnum=rnum+HDRSIZE; | ||||
|  | ||||
|   for (j=0; j<outnum; j+=i) | ||||
|     { | ||||
|       /* eay 26/08/92 I was not doing writing from where we | ||||
|        * got upto. */ | ||||
|       i=write(fd,&(outbuf[j]),(int)(outnum-j)); | ||||
|       if (i == -1) | ||||
| 	{ | ||||
| 	  if (errno == EINTR) | ||||
| 	    i=0; | ||||
| 	  else			/* This is really a bad error - very bad | ||||
| 	for (j=0; j<outnum; j+=i) | ||||
| 		{ | ||||
| 		/* eay 26/08/92 I was not doing writing from where we | ||||
| 		 * got upto. */ | ||||
| 		i=write(fd,&(outbuf[j]),(unsigned int)(outnum-j)); | ||||
| 		if (i == -1) | ||||
| 			{ | ||||
| 			if (errno == EINTR) | ||||
| 				i=0; | ||||
| 			else 	/* This is really a bad error - very bad | ||||
| 				 * It will stuff-up both ends. */ | ||||
| 	    return(-1); | ||||
| 	} | ||||
|     } | ||||
| 				return(-1); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
|   return(len); | ||||
| } | ||||
| 	return(len); | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										1114
									
								
								lib/des/fcrypt.c
									
									
									
									
									
								
							
							
						
						
									
										1114
									
								
								lib/des/fcrypt.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -6,6 +6,8 @@ | ||||
| #undef des_fixup_key_parity | ||||
| #endif /* des_fixup_key_parity */ | ||||
|  | ||||
| void des_fixup_key_parity(des_cblock *key); | ||||
|  | ||||
| void | ||||
| des_fixup_key_parity(des_cblock *key) | ||||
| { | ||||
|   | ||||
							
								
								
									
										50
									
								
								lib/des/makefile.bc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								lib/des/makefile.bc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| # | ||||
| # Origional BC Makefile from Teun <Teun.Nijssen@kub.nl> | ||||
| # | ||||
| # | ||||
| CC      = bcc | ||||
| TLIB    = tlib /0 /C | ||||
| # note: the -3 flag produces code for 386, 486, Pentium etc; omit it for 286s | ||||
| OPTIMIZE= -3 -O2 | ||||
| #WINDOWS= -W | ||||
| CFLAGS  = -c -ml -d $(OPTIMIZE) $(WINDOWS) -DMSDOS -DPROTO | ||||
| LFLAGS  = -ml $(WINDOWS) | ||||
|  | ||||
| .c.obj: | ||||
| 	$(CC) $(CFLAGS) $*.c | ||||
|  | ||||
| .obj.exe: | ||||
| 	$(CC) $(LFLAGS) -e$*.exe $*.obj libdes.lib   | ||||
|  | ||||
| all: $(LIB) destest.exe rpw.exe des.exe speed.exe | ||||
|  | ||||
| # "make clean": use a directory containing only libdes .exe and .obj files... | ||||
| clean: | ||||
| 	del *.exe | ||||
| 	del *.obj | ||||
| 	del libdes.lib | ||||
| 	del libdes.rsp | ||||
|  | ||||
| OBJS=   cbc_cksm.obj cbc_enc.obj  ecb_enc.obj  pcbc_enc.obj \ | ||||
| 	qud_cksm.obj rand_key.obj set_key.obj  str2key.obj \ | ||||
| 	enc_read.obj enc_writ.obj fcrypt.obj   cfb_enc.obj \ | ||||
| 	ecb3_enc.obj ofb_enc.obj  cbc3_enc.obj read_pwd.obj\ | ||||
| 	cfb64enc.obj ofb64enc.obj ede_enc.obj  cfb64ede.obj\ | ||||
| 	ofb64ede.obj supp.obj | ||||
|  | ||||
| LIB=    libdes.lib | ||||
|  | ||||
| $(LIB): $(OBJS) | ||||
| 	del $(LIB) | ||||
| 	makersp "+%s &\n" &&| | ||||
| 	$(OBJS) | ||||
| |       >libdes.rsp | ||||
| 	$(TLIB) libdes.lib @libdes.rsp,nul | ||||
| 	del libdes.rsp | ||||
|  | ||||
| destest.exe: destest.obj libdes.lib | ||||
| rpw.exe:     rpw.obj libdes.lib | ||||
| speed.exe:   speed.obj libdes.lib | ||||
| des.exe:     des.obj libdes.lib | ||||
|  | ||||
|  | ||||
							
								
								
									
										120
									
								
								lib/des/ncbc_enc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								lib/des/ncbc_enc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| /* lib/des/ncbc_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| void des_ncbc_encrypt(input, output, length, schedule, ivec, encrypt) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| des_key_schedule schedule; | ||||
| des_cblock (*ivec); | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	register unsigned long tin0,tin1; | ||||
| 	register unsigned long tout0,tout1,xor0,xor1; | ||||
| 	register unsigned char *in,*out; | ||||
| 	register long l=length; | ||||
| 	unsigned long tin[2]; | ||||
| 	unsigned char *iv; | ||||
|  | ||||
| 	in=(unsigned char *)input; | ||||
| 	out=(unsigned char *)output; | ||||
| 	iv=(unsigned char *)ivec; | ||||
|  | ||||
| 	if (encrypt) | ||||
| 		{ | ||||
| 		c2l(iv,tout0); | ||||
| 		c2l(iv,tout1); | ||||
| 		for (; l>0; l-=8) | ||||
| 			{ | ||||
| 			if (l >= 8) | ||||
| 				{ | ||||
| 				c2l(in,tin0); | ||||
| 				c2l(in,tin1); | ||||
| 				} | ||||
| 			else | ||||
| 				c2ln(in,tin0,tin1,l); | ||||
| 			tin0^=tout0; tin[0]=tin0; | ||||
| 			tin1^=tout1; tin[1]=tin1; | ||||
| 			des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); | ||||
| 			tout0=tin[0]; l2c(tout0,out); | ||||
| 			tout1=tin[1]; l2c(tout1,out); | ||||
| 			} | ||||
| 		iv=(unsigned char *)ivec; | ||||
| 		l2c(tout0,iv); | ||||
| 		l2c(tout1,iv); | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		c2l(iv,xor0); | ||||
| 		c2l(iv,xor1); | ||||
| 		for (; l>0; l-=8) | ||||
| 			{ | ||||
| 			c2l(in,tin0); tin[0]=tin0; | ||||
| 			c2l(in,tin1); tin[1]=tin1; | ||||
| 			des_encrypt((unsigned long *)tin,schedule,DES_DECRYPT); | ||||
| 			tout0=tin[0]^xor0; | ||||
| 			tout1=tin[1]^xor1; | ||||
| 			if (l >= 8) | ||||
| 				{ | ||||
| 				l2c(tout0,out); | ||||
| 				l2c(tout1,out); | ||||
| 				} | ||||
| 			else | ||||
| 				l2cn(tout0,tout1,out,l); | ||||
| 			xor0=tin0; | ||||
| 			xor1=tin1; | ||||
| 			} | ||||
| 		iv=(unsigned char *)ivec; | ||||
| 		l2c(xor0,iv); | ||||
| 		l2c(xor1,iv); | ||||
| 		} | ||||
| 	tin0=tin1=tout0=tout1=xor0=xor1=0; | ||||
| 	tin[0]=tin[1]=0; | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										126
									
								
								lib/des/ofb64ede.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								lib/des/ofb64ede.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,126 @@ | ||||
| /* lib/des/ofb64enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* The input and output encrypted as though 64bit ofb mode is being | ||||
|  * used.  The extra state information to record how much of the | ||||
|  * 64bit block we have used is contained in *num; | ||||
|  */ | ||||
| void des_ede3_ofb64_encrypt(in, out, length, k1,k2,k3, ivec, num) | ||||
| register unsigned char *in; | ||||
| register unsigned char *out; | ||||
| long length; | ||||
| des_key_schedule k1,k2,k3; | ||||
| des_cblock (*ivec); | ||||
| int *num; | ||||
| 	{ | ||||
| 	register unsigned long v0,v1; | ||||
| 	register int n=*num; | ||||
| 	register long l=length; | ||||
| 	des_cblock d; | ||||
| 	register char *dp; | ||||
| 	unsigned long ti[2]; | ||||
| 	unsigned char *iv; | ||||
| 	int save=0; | ||||
|  | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	c2l(iv,v0); | ||||
| 	c2l(iv,v1); | ||||
| 	ti[0]=v0; | ||||
| 	ti[1]=v1; | ||||
| 	dp=(char *)d; | ||||
| 	l2c(v0,dp); | ||||
| 	l2c(v1,dp); | ||||
| 	while (l--) | ||||
| 		{ | ||||
| 		if (n == 0) | ||||
| 			{ | ||||
| 			IP(v0,v1); | ||||
|  | ||||
| 			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); | ||||
| 			v0=ti[0]; | ||||
| 			v1=ti[1]; | ||||
|  | ||||
| 			FP(v1,v0); | ||||
|  | ||||
| 			dp=(char *)d; | ||||
| 			l2c(v0,dp); | ||||
| 			l2c(v1,dp); | ||||
| 			save++; | ||||
| 			} | ||||
| 		*(out++)=*(in++)^d[n]; | ||||
| 		n=(n+1)&0x07; | ||||
| 		} | ||||
| 	if (save) | ||||
| 		{ | ||||
| /*		v0=ti[0]; | ||||
| 		v1=ti[1];*/ | ||||
| 		iv=(unsigned char *)ivec; | ||||
| 		l2c(v0,iv); | ||||
| 		l2c(v1,iv); | ||||
| 		} | ||||
| 	v0=v1=ti[0]=ti[1]=0; | ||||
| 	*num=n; | ||||
| 	} | ||||
|  | ||||
| #ifdef undef /* MACRO */ | ||||
| void des_ede2_ofb64_encrypt(in, out, length, k1,k2, ivec, num) | ||||
| register unsigned char *in; | ||||
| register unsigned char *out; | ||||
| long length; | ||||
| des_key_schedule k1,k2; | ||||
| des_cblock (*ivec); | ||||
| int *num; | ||||
| 	{ | ||||
| 	des_ede3_ofb64_encrypt(in, out, length, k1,k2,k1, ivec, num); | ||||
| 	} | ||||
| #endif | ||||
							
								
								
									
										103
									
								
								lib/des/ofb64enc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								lib/des/ofb64enc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| /* lib/des/ofb64enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* The input and output encrypted as though 64bit ofb mode is being | ||||
|  * used.  The extra state information to record how much of the | ||||
|  * 64bit block we have used is contained in *num; | ||||
|  */ | ||||
| void des_ofb64_encrypt(in, out, length, schedule, ivec, num) | ||||
| register unsigned char *in; | ||||
| register unsigned char *out; | ||||
| long length; | ||||
| des_key_schedule schedule; | ||||
| des_cblock (*ivec); | ||||
| int *num; | ||||
| 	{ | ||||
| 	register unsigned long v0,v1,t; | ||||
| 	register int n=*num; | ||||
| 	register long l=length; | ||||
| 	des_cblock d; | ||||
| 	register char *dp; | ||||
| 	unsigned long ti[2]; | ||||
| 	unsigned char *iv; | ||||
| 	int save=0; | ||||
|  | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	c2l(iv,v0); | ||||
| 	c2l(iv,v1); | ||||
| 	ti[0]=v0; | ||||
| 	ti[1]=v1; | ||||
| 	dp=(char *)d; | ||||
| 	l2c(v0,dp); | ||||
| 	l2c(v1,dp); | ||||
| 	while (l--) | ||||
| 		{ | ||||
| 		if (n == 0) | ||||
| 			{ | ||||
| 			des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); | ||||
| 			dp=(char *)d; | ||||
| 			t=ti[0]; l2c(t,dp); | ||||
| 			t=ti[1]; l2c(t,dp); | ||||
| 			save++; | ||||
| 			} | ||||
| 		*(out++)=*(in++)^d[n]; | ||||
| 		n=(n+1)&0x07; | ||||
| 		} | ||||
| 	if (save) | ||||
| 		{ | ||||
| 		v0=ti[0]; | ||||
| 		v1=ti[1]; | ||||
| 		iv=(unsigned char *)ivec; | ||||
| 		l2c(v0,iv); | ||||
| 		l2c(v1,iv); | ||||
| 		} | ||||
| 	t=v0=v1=ti[0]=ti[1]=0; | ||||
| 	*num=n; | ||||
| 	} | ||||
|  | ||||
| @@ -1,5 +1,50 @@ | ||||
| /* ofb_enc.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/ofb_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* The input and output are loaded in multiples of 8 bits. | ||||
| @@ -8,55 +53,59 @@ | ||||
|  * the second.  The second 12 bits will come from the 3rd and half the 4th | ||||
|  * byte. | ||||
|  */ | ||||
| int des_ofb_encrypt(unsigned char *in, unsigned char *out, int numbits, long int length, struct des_ks_struct *schedule, des_cblock (*ivec)) | ||||
| { | ||||
|   register u_int32_t d0,d1,v0,v1,n=(numbits+7)/8; | ||||
|   register u_int32_t mask0,mask1; | ||||
|   register long l=length; | ||||
|   register int num=numbits; | ||||
|   u_int32_t ti[2]; | ||||
|   unsigned char *iv; | ||||
| void des_ofb_encrypt(in, out, numbits, length, schedule, ivec) | ||||
| unsigned char *in; | ||||
| unsigned char *out; | ||||
| int numbits; | ||||
| 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 long l=length; | ||||
| 	register int num=numbits; | ||||
| 	unsigned long ti[2]; | ||||
| 	unsigned char *iv; | ||||
|  | ||||
|   if (num > 64) return(0); | ||||
|   if (num > 32) | ||||
|     { | ||||
|       mask0=0xffffffff; | ||||
|       if (num >= 64) | ||||
| 	mask1=mask0; | ||||
|       else | ||||
| 	mask1=(1L<<(num-32))-1; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       if (num == 32) | ||||
| 	mask0=0xffffffff; | ||||
|       else | ||||
| 	mask0=(1L<<num)-1; | ||||
|       mask1=0x00000000; | ||||
|     } | ||||
| 	if (num > 64) return; | ||||
| 	if (num > 32) | ||||
| 		{ | ||||
| 		mask0=0xffffffffL; | ||||
| 		if (num >= 64) | ||||
| 			mask1=mask0; | ||||
| 		else | ||||
| 			mask1=(1L<<(num-32))-1; | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		if (num == 32) | ||||
| 			mask0=0xffffffffL; | ||||
| 		else | ||||
| 			mask0=(1L<<num)-1; | ||||
| 		mask1=0x00000000; | ||||
| 		} | ||||
|  | ||||
|   iv=(unsigned char *)ivec; | ||||
|   c2l(iv,v0); | ||||
|   c2l(iv,v1); | ||||
|   ti[0]=v0; | ||||
|   ti[1]=v1; | ||||
|   while (l-- > 0) | ||||
|     { | ||||
|       des_encrypt(ti,ti, | ||||
| 		  schedule,DES_ENCRYPT); | ||||
|       c2ln(in,d0,d1,n); | ||||
|       in+=n; | ||||
|       d0=(d0^ti[0])&mask0; | ||||
|       d1=(d1^ti[1])&mask1; | ||||
|       l2cn(d0,d1,out,n); | ||||
|       out+=n; | ||||
|     } | ||||
|   v0=ti[0]; | ||||
|   v1=ti[1]; | ||||
|   iv=(unsigned char *)ivec; | ||||
|   l2c(v0,iv); | ||||
|   l2c(v1,iv); | ||||
|   v0=v1=d0=d1=ti[0]=ti[1]=0; | ||||
|   return(0); | ||||
| } | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	c2l(iv,v0); | ||||
| 	c2l(iv,v1); | ||||
| 	ti[0]=v0; | ||||
| 	ti[1]=v1; | ||||
| 	while (l-- > 0) | ||||
| 		{ | ||||
| 		des_encrypt((unsigned long *)ti,schedule,DES_ENCRYPT); | ||||
| 		c2ln(in,d0,d1,n); | ||||
| 		in+=n; | ||||
| 		d0=(d0^ti[0])&mask0; | ||||
| 		d1=(d1^ti[1])&mask1; | ||||
| 		l2cn(d0,d1,out,n); | ||||
| 		out+=n; | ||||
| 		} | ||||
| 	v0=ti[0]; | ||||
| 	v1=ti[1]; | ||||
| 	iv=(unsigned char *)ivec; | ||||
| 	l2c(v0,iv); | ||||
| 	l2c(v1,iv); | ||||
| 	v0=v1=d0=d1=ti[0]=ti[1]=0; | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -1,67 +1,115 @@ | ||||
| /* pcbc_enc.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/pcbc_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| int des_pcbc_encrypt(des_cblock (*input), des_cblock (*output), long int length, struct des_ks_struct *schedule, des_cblock (*ivec), int encrypt) | ||||
| { | ||||
|   register u_int32_t sin0,sin1,xor0,xor1,tout0,tout1; | ||||
|   u_int32_t tin[2],tout[2]; | ||||
|   unsigned char *in,*out,*iv; | ||||
|  | ||||
|   in=(unsigned char *)input; | ||||
|   out=(unsigned char *)output; | ||||
|   iv=(unsigned char *)ivec; | ||||
|  | ||||
|   if (encrypt) | ||||
|     { | ||||
|       c2l(iv,xor0); | ||||
|       c2l(iv,xor1); | ||||
|       for (; length>0; length-=8) | ||||
| void des_pcbc_encrypt(input, output, length, schedule, ivec, encrypt) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| des_key_schedule schedule; | ||||
| des_cblock (*ivec); | ||||
| int encrypt; | ||||
| 	{ | ||||
| 	  if (length >= 8) | ||||
| 	    { | ||||
| 	      c2l(in,sin0); | ||||
| 	      c2l(in,sin1); | ||||
| 	    } | ||||
| 	  else | ||||
| 	    c2ln(in,sin0,sin1,length); | ||||
| 	  tin[0]=sin0^xor0; | ||||
| 	  tin[1]=sin1^xor1; | ||||
| 	  des_encrypt(tin,tout, | ||||
| 		      schedule,encrypt); | ||||
| 	  tout0=tout[0]; | ||||
| 	  tout1=tout[1]; | ||||
| 	  xor0=sin0^tout[0]; | ||||
| 	  xor1=sin1^tout[1]; | ||||
| 	  l2c(tout0,out); | ||||
| 	  l2c(tout1,out); | ||||
| 	register unsigned long sin0,sin1,xor0,xor1,tout0,tout1; | ||||
| 	unsigned long tin[2]; | ||||
| 	unsigned char *in,*out,*iv; | ||||
|  | ||||
| 	in=(unsigned char *)input; | ||||
| 	out=(unsigned char *)output; | ||||
| 	iv=(unsigned char *)ivec; | ||||
|  | ||||
| 	if (encrypt) | ||||
| 		{ | ||||
| 		c2l(iv,xor0); | ||||
| 		c2l(iv,xor1); | ||||
| 		for (; length>0; length-=8) | ||||
| 			{ | ||||
| 			if (length >= 8) | ||||
| 				{ | ||||
| 				c2l(in,sin0); | ||||
| 				c2l(in,sin1); | ||||
| 				} | ||||
| 			else | ||||
| 				c2ln(in,sin0,sin1,length); | ||||
| 			tin[0]=sin0^xor0; | ||||
| 			tin[1]=sin1^xor1; | ||||
| 			des_encrypt((unsigned long *)tin,schedule,DES_ENCRYPT); | ||||
| 			tout0=tin[0]; | ||||
| 			tout1=tin[1]; | ||||
| 			xor0=sin0^tout0; | ||||
| 			xor1=sin1^tout1; | ||||
| 			l2c(tout0,out); | ||||
| 			l2c(tout1,out); | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		c2l(iv,xor0); c2l(iv,xor1); | ||||
| 		for (; length>0; length-=8) | ||||
| 			{ | ||||
| 			c2l(in,sin0); | ||||
| 			c2l(in,sin1); | ||||
| 			tin[0]=sin0; | ||||
| 			tin[1]=sin1; | ||||
| 			des_encrypt((unsigned long *)tin,schedule,DES_DECRYPT); | ||||
| 			tout0=tin[0]^xor0; | ||||
| 			tout1=tin[1]^xor1; | ||||
| 			if (length >= 8) | ||||
| 				{ | ||||
| 				l2c(tout0,out); | ||||
| 				l2c(tout1,out); | ||||
| 				} | ||||
| 			else | ||||
| 				l2cn(tout0,tout1,out,length); | ||||
| 			xor0=tout0^sin0; | ||||
| 			xor1=tout1^sin1; | ||||
| 			} | ||||
| 		} | ||||
| 	tin[0]=tin[1]=0; | ||||
| 	sin0=sin1=xor0=xor1=tout0=tout1=0; | ||||
| 	} | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       c2l(iv,xor0); c2l(iv,xor1); | ||||
|       for (; length>0; length-=8) | ||||
| 	{ | ||||
| 	  c2l(in,sin0); | ||||
| 	  c2l(in,sin1); | ||||
| 	  tin[0]=sin0; | ||||
| 	  tin[1]=sin1; | ||||
| 	  des_encrypt(tin,tout, | ||||
| 		      schedule,encrypt); | ||||
| 	  tout0=tout[0]^xor0; | ||||
| 	  tout1=tout[1]^xor1; | ||||
| 	  if (length >= 8) | ||||
| 	    { | ||||
| 	      l2c(tout0,out); | ||||
| 	      l2c(tout1,out); | ||||
| 	    } | ||||
| 	  else | ||||
| 	    l2cn(tout0,tout1,out,length); | ||||
| 	  xor0=tout0^sin0; | ||||
| 	  xor1=tout1^sin1; | ||||
| 	} | ||||
|     } | ||||
|   tin[0]=tin[1]=tout[0]=tout[1]=0; | ||||
|   sin0=sin1=xor0=xor1=tout0=tout1=0; | ||||
|   return(0); | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,51 @@ | ||||
| /* podd.h */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| static unsigned char odd_parity[256]={ | ||||
| /* lib/des/podd.h */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| static const unsigned char odd_parity[256]={ | ||||
|   1,  1,  2,  2,  4,  4,  7,  7,  8,  8, 11, 11, 13, 13, 14, 14, | ||||
|  16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, | ||||
|  32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, | ||||
|   | ||||
| @@ -1,5 +1,50 @@ | ||||
| /* qud_cksm.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/qud_cksm.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| /* From "Message Authentication"  R.R. Jueneman, S.M. Matyas, C.H. Meyer | ||||
|  * IEEE Communications Magazine Sept 1985 Vol. 23 No. 9 p 29-40 | ||||
|  * This module in only based on the code in this paper and is | ||||
| @@ -8,76 +53,81 @@ | ||||
| #include "des_locl.h" | ||||
|  | ||||
| /* bug fix for dos - 7/6/91 - Larry hughes@logos.ucs.indiana.edu */ | ||||
| #define B0(a)	(((u_int32_t)(a))) | ||||
| #define B1(a)	(((u_int32_t)(a))<<8) | ||||
| #define B2(a)	(((u_int32_t)(a))<<16) | ||||
| #define B3(a)	(((u_int32_t)(a))<<24) | ||||
| #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) | ||||
|  | ||||
| /* used to scramble things a bit */ | ||||
| /* Got the value MIT uses via brute force :-) 2/10/90 eay */ | ||||
| #define NOISE	((u_int32_t)83653421) | ||||
| #define NOISE	((unsigned long)83653421L) | ||||
|  | ||||
| u_int32_t des_quad_cksum(des_cblock (*input), des_cblock (*output), long int length, int out_count, des_cblock (*seed)) | ||||
| { | ||||
|   u_int32_t z0,z1,t0,t1; | ||||
|   int i; | ||||
|   long l=0; | ||||
|   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]); | ||||
|  | ||||
|   for (i=0; ((i<4)&&(i<out_count)); i++) | ||||
|     { | ||||
|       cp=(unsigned char *)input; | ||||
|       l=length; | ||||
|       while (l > 0) | ||||
| unsigned long des_quad_cksum(input, output, length, out_count, seed) | ||||
| des_cblock (*input); | ||||
| des_cblock (*output); | ||||
| long length; | ||||
| int out_count; | ||||
| des_cblock (*seed); | ||||
| 	{ | ||||
| 	  if (l > 1) | ||||
| 	    { | ||||
| 	      t0= (u_int32_t)(*(cp++)); | ||||
| 	      t0|=(u_int32_t)B1(*(cp++)); | ||||
| 	      l--; | ||||
| 	    } | ||||
| 	  else | ||||
| 	    t0= (u_int32_t)(*(cp++)); | ||||
| 	  l--; | ||||
| 	  /* add */ | ||||
| 	  t0+=z0; | ||||
| 	  t0&=0xffffffff; | ||||
| 	  t1=z1; | ||||
| 	  /* square, well sort of square */ | ||||
| 	  z0=((((t0*t0)&0xffffffff)+((t1*t1)&0xffffffff)) | ||||
| 	      &0xffffffff)%0x7fffffff;  | ||||
| 	  z1=((t0*((t1+NOISE)&0xffffffff))&0xffffffff)%0x7fffffff; | ||||
| 	} | ||||
|       if (lp != NULL) | ||||
| 	{ | ||||
| 	  /* I believe I finally have things worked out. | ||||
| 	   * The MIT library assumes that the checksum | ||||
| 	   * is one huge number and it is returned in a | ||||
| 	   * host dependant byte order. | ||||
| 	   */ | ||||
| 	  static u_int32_t l=1; | ||||
| 	  static unsigned char *c=(unsigned char *)&l; | ||||
| 	unsigned long z0,z1,t0,t1; | ||||
| 	int i; | ||||
| 	long l=0; | ||||
| 	unsigned char *cp; | ||||
| 	unsigned char *lp; | ||||
|  | ||||
| 	  if (c[0]) | ||||
| 	    { | ||||
| 	      l2c(z0,lp); | ||||
| 	      l2c(z1,lp); | ||||
| 	    } | ||||
| 	  else | ||||
| 	    { | ||||
| 	      lp=output[out_count-i-1]; | ||||
| 	      l2n(z1,lp); | ||||
| 	      l2n(z0,lp); | ||||
| 	    } | ||||
| 	} | ||||
|     } | ||||
|   return(z0); | ||||
| } | ||||
| 	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]); | ||||
|  | ||||
| 	for (i=0; ((i<4)&&(i<out_count)); i++) | ||||
| 		{ | ||||
| 		cp=(unsigned char *)input; | ||||
| 		l=length; | ||||
| 		while (l > 0) | ||||
| 			{ | ||||
| 			if (l > 1) | ||||
| 				{ | ||||
| 				t0= (unsigned long)(*(cp++)); | ||||
| 				t0|=(unsigned long)B1(*(cp++)); | ||||
| 				l--; | ||||
| 				} | ||||
| 			else | ||||
| 				t0= (unsigned long)(*(cp++)); | ||||
| 			l--; | ||||
| 			/* add */ | ||||
| 			t0+=z0; | ||||
| 			t0&=0xffffffffL; | ||||
| 			t1=z1; | ||||
| 			/* square, well sort of square */ | ||||
| 			z0=((((t0*t0)&0xffffffffL)+((t1*t1)&0xffffffffL)) | ||||
| 				&0xffffffffL)%0x7fffffffL;  | ||||
| 			z1=((t0*((t1+NOISE)&0xffffffffL))&0xffffffffL)%0x7fffffffL; | ||||
| 			} | ||||
| 		if (lp != NULL) | ||||
| 			{ | ||||
| 			/* I believe I finally have things worked out. | ||||
| 			 * The MIT library assumes that the checksum | ||||
| 			 * is one huge number and it is returned in a | ||||
| 			 * host dependant byte order. | ||||
| 			 */ | ||||
| 			static unsigned long ltmp=1; | ||||
| 			static unsigned char *c=(unsigned char *)<mp; | ||||
|  | ||||
| 			if (c[0]) | ||||
| 				{ | ||||
| 				l2c(z0,lp); | ||||
| 				l2c(z1,lp); | ||||
| 				} | ||||
| 			else | ||||
| 				{ | ||||
| 				lp=output[out_count-i-1]; | ||||
| 				l2n(z1,lp); | ||||
| 				l2n(z0,lp); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	return(z0); | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -1,44 +1,107 @@ | ||||
| /* rand_key.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/rand_key.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
| #include <time.h> | ||||
|  | ||||
| int des_random_key(unsigned char *ret) | ||||
| { | ||||
|   des_key_schedule ks; | ||||
|   static u_int32_t 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; | ||||
|   u_int32_t t, now; | ||||
| static int seed=0; | ||||
| static des_cblock init; | ||||
|  | ||||
| void des_random_seed(key) | ||||
| des_cblock key; | ||||
| 	{ | ||||
| 	memcpy(init,key,sizeof(des_cblock)); | ||||
| 	seed=1; | ||||
| 	} | ||||
|  | ||||
| void des_random_key(ret) | ||||
| unsigned char *ret; | ||||
| 	{ | ||||
| 	des_key_schedule ks; | ||||
| 	static unsigned 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; | ||||
| 	int i; | ||||
|  | ||||
|   now=(unsigned long)time(NULL); | ||||
| #ifdef MSDOS | ||||
|   pid=1; | ||||
| 	pid=1; | ||||
| #else | ||||
|   if (!pid) pid=getpid(); | ||||
| 	if (!pid) pid=getpid(); | ||||
| #endif | ||||
|  try_again: | ||||
|   p=key; | ||||
|   t=now; | ||||
|   l2c(t,p); | ||||
|   t=(u_int32_t)((pid)|((c++)<<16)); | ||||
|   l2c(t,p); | ||||
| 	p=key; | ||||
| 	if (seed) | ||||
| 		{ | ||||
| 		for (i=0; i<8; i++) | ||||
| 			{ | ||||
| 			data[i] ^= init[i]; | ||||
| 			init[i]=0; | ||||
| 			} | ||||
| 		seed=0; | ||||
| 		} | ||||
| 	t=(unsigned long)time(NULL); | ||||
| 	l2c(t,p); | ||||
| 	t=(unsigned long)((pid)|((c++)<<16)); | ||||
| 	l2c(t,p); | ||||
|  | ||||
|   des_set_odd_parity((des_cblock *)data); | ||||
|   des_set_key((des_cblock *)data,ks); | ||||
|   des_cbc_cksum((des_cblock *)key,(des_cblock *)key, | ||||
| 		(long)sizeof(key),ks,(des_cblock *)data); | ||||
|   des_set_odd_parity((des_cblock *)key); | ||||
|   des_cbc_cksum((des_cblock *)key,(des_cblock *)key, | ||||
| 	des_set_odd_parity((des_cblock *)data); | ||||
| 	des_set_key((des_cblock *)data,ks); | ||||
| 	des_cbc_cksum((des_cblock *)key,(des_cblock *)key, | ||||
| 		(long)sizeof(key),ks,(des_cblock *)data); | ||||
|  | ||||
|   memcpy(ret,key,sizeof(key)); | ||||
|   memset(key,0,sizeof(key)); | ||||
|   memset(ks,0,sizeof(ks)); | ||||
|   t=0; | ||||
|   /* random key must have odd parity and not be weak */ | ||||
|   des_set_odd_parity((des_cblock *)ret); | ||||
|   if (des_is_weak_key((des_cblock *)ret)) goto try_again; | ||||
|   return(0); | ||||
| } | ||||
| 	des_set_odd_parity((des_cblock *)key); | ||||
| 	des_set_key((des_cblock *)key,ks); | ||||
| 	des_cbc_cksum((des_cblock *)key,(des_cblock *)data, | ||||
| 		(long)sizeof(key),ks,(des_cblock *)key); | ||||
|  | ||||
| 	memcpy(ret,data,sizeof(key)); | ||||
| 	memset(key,0,sizeof(key)); | ||||
| 	memset(ks,0,sizeof(ks)); | ||||
| 	t=0; | ||||
| 	} | ||||
|   | ||||
| @@ -1,35 +1,108 @@ | ||||
| /* read_pwd.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/read_pwd.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| /* 06-Apr-92 Luke Brennan    Support for VMS */ | ||||
| #include "des_locl.h" | ||||
| #include <string.h> | ||||
| #include <signal.h> | ||||
| #include <string.h> | ||||
| #include <setjmp.h> | ||||
|  | ||||
| /* Ick! */ | ||||
| #if defined(__svr4__) || defined(__sgi) || defined(__linux) | ||||
| /* There are 5 types of terminal interface supported, | ||||
|  * TERMIO, TERMIOS, VMS, MSDOS and SGTTY | ||||
|  */ | ||||
|  | ||||
| #if defined(sgi) || defined(__sgi) | ||||
| #define TERMIOS | ||||
| #undef TERMIO | ||||
| #undef SGTTY | ||||
| #endif | ||||
|  | ||||
| #ifdef _LIBC | ||||
| #define TERMIO | ||||
| #endif | ||||
|  | ||||
| #ifndef VMS | ||||
| #ifndef MSDOS | ||||
| #if !defined(TERMIO) && !defined(TERMIOS) && !defined(VMS) && !defined(MSDOS) | ||||
| #define SGTTY | ||||
| #endif | ||||
|  | ||||
| #ifdef TERMIOS | ||||
| #include <termios.h> | ||||
| #define TTY_STRUCT		struct termios | ||||
| #define TTY_FLAGS		c_lflag | ||||
| #define	TTY_get(tty,data)	tcgetattr(tty,data) | ||||
| #define TTY_set(tty,data)	tcsetattr(tty,TCSANOW,data) | ||||
| #endif | ||||
|  | ||||
| #ifdef TERMIO | ||||
| #include <termio.h> | ||||
| #define sgttyb termio | ||||
| #define sg_flags c_lflag | ||||
| /* Really redefine these ioctl's! */ | ||||
| #undef TIOCGETP | ||||
| #define TIOCGETP TCGETA | ||||
| #undef TIOCSETP | ||||
| #define TIOCSETP TCSETA | ||||
| #else /* !TERMIO */ | ||||
| #include <sgtty.h> | ||||
| #define TTY_STRUCT		struct termio | ||||
| #define TTY_FLAGS		c_lflag | ||||
| #define TTY_get(tty,data)	ioctl(tty,TCGETA,data) | ||||
| #define TTY_set(tty,data)	ioctl(tty,TCSETA,data) | ||||
| #endif | ||||
|  | ||||
| #ifdef SGTTY | ||||
| #include <sgtty.h> | ||||
| #define TTY_STRUCT		struct sgttyb | ||||
| #define TTY_FLAGS		sg_flags | ||||
| #define TTY_get(tty,data)	ioctl(tty,TIOCGETP,data) | ||||
| #define TTY_set(tty,data)	ioctl(tty,TIOCSETP,data) | ||||
| #endif | ||||
|  | ||||
| #ifndef _LIBC | ||||
| #include <sys/ioctl.h> | ||||
| #else /* MSDOS */ | ||||
| #endif | ||||
|  | ||||
| #ifdef MSDOS | ||||
| #include <conio.h> | ||||
| #define fgets(a,b,c) noecho_fgets(a,b,c) | ||||
| #endif | ||||
| #else /* VMS */ | ||||
|  | ||||
| #ifdef VMS | ||||
| #include <ssdef.h> | ||||
| #include <iodef.h> | ||||
| #include <ttdef.h> | ||||
| @@ -40,69 +113,114 @@ struct IOSB { | ||||
| 	long  iosb$l_info; | ||||
| 	}; | ||||
| #endif | ||||
| #ifndef NSIG | ||||
| #define NSIG 32 | ||||
|  | ||||
| #ifndef NX509_SIG | ||||
| #define NX509_SIG 32 | ||||
| #endif | ||||
|  | ||||
| #ifdef PROTO | ||||
| static void read_till_nl(FILE *); | ||||
| 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 | ||||
| static int noecho_fgets(char *buf, int size, FILE *tty); | ||||
| #endif | ||||
| #else | ||||
| static void read_till_nl(); | ||||
| static int read_pw(); | ||||
| static void recsig(); | ||||
| static void pushsig(); | ||||
| static void popsig(); | ||||
| #ifdef MSDOS | ||||
| static int noecho_fgets(); | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| static void (*savsig[NSIG])(); | ||||
| static void (*savsig[NX509_SIG])(); | ||||
| static jmp_buf save; | ||||
|  | ||||
| static void recsig(int sig) | ||||
| { | ||||
| 	longjmp(save,1); | ||||
| } | ||||
| int des_read_password(key, prompt, verify) | ||||
| des_cblock (*key); | ||||
| char *prompt; | ||||
| int verify; | ||||
| 	{ | ||||
| 	int ok; | ||||
| 	char buf[BUFSIZ],buff[BUFSIZ]; | ||||
|  | ||||
| static void pushsig(void) | ||||
| { | ||||
| 	int i; | ||||
| 	if ((ok=read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0) | ||||
| 		des_string_to_key(buf,key); | ||||
| 	memset(buf,0,BUFSIZ); | ||||
| 	memset(buff,0,BUFSIZ); | ||||
| 	return(ok); | ||||
| 	} | ||||
|  | ||||
| 	for (i=0; i<NSIG; i++) | ||||
| 		savsig[i]=signal(i,recsig); | ||||
| } | ||||
| int des_read_2passwords(key1, key2, prompt, verify) | ||||
| des_cblock (*key1); | ||||
| des_cblock (*key2); | ||||
| char *prompt; | ||||
| int verify; | ||||
| 	{ | ||||
| 	int ok; | ||||
| 	char buf[BUFSIZ],buff[BUFSIZ]; | ||||
|  | ||||
| static void popsig(void) | ||||
| { | ||||
| 	int i; | ||||
| 	if ((ok=read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0) | ||||
| 		des_string_to_2keys(buf,key1,key2); | ||||
| 	memset(buf,0,BUFSIZ); | ||||
| 	memset(buff,0,BUFSIZ); | ||||
| 	return(ok); | ||||
| 	} | ||||
|  | ||||
| 	for (i=0; i<NSIG; i++) | ||||
| 		signal(i,savsig[i]); | ||||
| } | ||||
| int des_read_pw_string(buf, length, prompt, verify) | ||||
| char *buf; | ||||
| int length; | ||||
| char *prompt; | ||||
| int verify; | ||||
| 	{ | ||||
| 	char buff[BUFSIZ]; | ||||
| 	int ret; | ||||
|  | ||||
| 	ret=read_pw(buf,buff,(length>BUFSIZ)?BUFSIZ:length,prompt,verify); | ||||
| 	memset(buff,0,BUFSIZ); | ||||
| 	return(ret); | ||||
| 	} | ||||
|  | ||||
| static void read_till_nl(FILE *in) | ||||
| { | ||||
| static void read_till_nl(in) | ||||
| FILE *in; | ||||
| 	{ | ||||
| #define SIZE 4 | ||||
| 	char buf[SIZE+1]; | ||||
|  | ||||
| 	do	{ | ||||
| 		fgets(buf,SIZE,in); | ||||
| 	} while (strchr(buf,'\n') == NULL); | ||||
| } | ||||
|  | ||||
|  | ||||
| 		} while (strchr(buf,'\n') == NULL); | ||||
| 	} | ||||
|  | ||||
| /* return 0 if ok, 1 (or -1) otherwise */ | ||||
| static int read_pw(char *buf, char *buff, int size, char *prompt,int verify) | ||||
| { | ||||
| #ifndef VMS | ||||
| #ifndef MSDOS | ||||
| 	struct sgttyb tty_orig,tty_new; | ||||
| #endif /* !MSDOS */ | ||||
| #else | ||||
| static int read_pw(buf, buff, size, prompt, verify) | ||||
| char *buf; | ||||
| char *buff; | ||||
| int size; | ||||
| char *prompt; | ||||
| int verify; | ||||
| 	{ | ||||
| #ifdef VMS | ||||
| 	struct IOSB iosb; | ||||
| 	$DESCRIPTOR(terminal,"TT"); | ||||
| 	long tty_orig[3], tty_new[3]; | ||||
| 	long status; | ||||
| 	unsigned short channel = 0; | ||||
| #else | ||||
| #ifndef MSDOS | ||||
| 	TTY_STRUCT tty_orig,tty_new; | ||||
| #endif | ||||
| #endif | ||||
| 	int number=5; | ||||
| 	int ok=0; | ||||
| 	char *p; | ||||
| 	int ps=0; | ||||
| 	FILE *tty; | ||||
| 	FILE *tty=NULL; | ||||
| 	char *p; | ||||
|  | ||||
| #ifndef MSDOS | ||||
| 	if ((tty=fopen("/dev/tty","r")) == NULL) | ||||
| @@ -111,13 +229,13 @@ static int read_pw(char *buf, char *buff, int size, char *prompt,int verify) | ||||
| 	if ((tty=fopen("con","r")) == NULL) | ||||
| 		tty=stdin; | ||||
| #endif /* MSDOS */ | ||||
| #ifndef VMS | ||||
| #ifdef TIOCGETP | ||||
| 	if (ioctl(fileno(tty),TIOCGETP,(char *)&tty_orig) == -1) | ||||
|  | ||||
| #if defined(TTY_get) && !defined(VMS) | ||||
| 	if (TTY_get(fileno(tty),&tty_orig) == -1) | ||||
| 		return(-1); | ||||
| 	bcopy(&(tty_orig),&(tty_new),sizeof(tty_orig)); | ||||
| 	memcpy(&(tty_new),&(tty_orig),sizeof(tty_orig)); | ||||
| #endif | ||||
| #else /* VMS */ | ||||
| #ifdef VMS | ||||
| 	status = SYS$ASSIGN(&terminal,&channel,0,0); | ||||
| 	if (status != SS$_NORMAL) | ||||
| 		return(-1); | ||||
| @@ -133,25 +251,26 @@ static int read_pw(char *buf, char *buff, int size, char *prompt,int verify) | ||||
| 		} | ||||
| 	pushsig(); | ||||
| 	ps=1; | ||||
| #ifndef VMS | ||||
| #ifndef MSDOS | ||||
| 	tty_new.sg_flags &= ~ECHO; | ||||
| #endif /* !MSDOS */ | ||||
| #ifdef TIOCSETP | ||||
| 	if (ioctl(fileno(tty),TIOCSETP,(char *)&tty_new) == -1) | ||||
|  | ||||
| #ifdef TTY_FLAGS | ||||
| 	tty_new.TTY_FLAGS &= ~ECHO; | ||||
| #endif | ||||
|  | ||||
| #if defined(TTY_set) && !defined(VMS) | ||||
| 	if (TTY_set(fileno(tty),&tty_new) == -1) | ||||
| 		return(-1); | ||||
| #endif | ||||
| #else /* VMS */ | ||||
| #ifdef VMS | ||||
| 	tty_new[0] = tty_orig[0]; | ||||
| 	tty_new[1] = tty_orig[1] | TT$M_NOECHO; | ||||
| 	tty_new[2] = tty_orig[2]; | ||||
| 	status = SYS$QIOW(0,channel,IO$_SETMODE,&iosb,0,0,tty_new,12,0,0,0,0); | ||||
| 	if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) | ||||
| 		return(-1); | ||||
| #endif /* VMS */ | ||||
| #endif | ||||
| 	ps=2; | ||||
|  | ||||
| 	while (!ok) | ||||
| 	while ((!ok) && (number--)) | ||||
| 		{ | ||||
| 		fputs(prompt,stderr); | ||||
| 		fflush(stderr); | ||||
| @@ -175,9 +294,10 @@ static int read_pw(char *buf, char *buff, int size, char *prompt,int verify) | ||||
| 				 | ||||
| 			if (strcmp(buf,buff) != 0) | ||||
| 				{ | ||||
| 				fprintf(stderr,"\nVerify failure - try again\n"); | ||||
| 				fprintf(stderr,"\nVerify failure"); | ||||
| 				fflush(stderr); | ||||
| 				continue; | ||||
| 				break; | ||||
| 				/* continue; */ | ||||
| 				} | ||||
| 			} | ||||
| 		ok=1; | ||||
| @@ -186,15 +306,14 @@ static int read_pw(char *buf, char *buff, int size, char *prompt,int verify) | ||||
| error: | ||||
| 	fprintf(stderr,"\n"); | ||||
| 	/* What can we do if there is an error? */ | ||||
| #ifndef VMS | ||||
| #ifdef TIOCSETP | ||||
| 	if (ps >= 2) ioctl(fileno(tty),TIOCSETP,(char *)&tty_orig); | ||||
| #if defined(TTY_set) && !defined(VMS)  | ||||
| 	if (ps >= 2) TTY_set(fileno(tty),&tty_orig); | ||||
| #endif | ||||
| #else /* VMS */ | ||||
| #ifdef VMS | ||||
| 	if (ps >= 2) | ||||
| 		status = SYS$QIOW(0,channel,IO$_SETMODE,&iosb,0,0 | ||||
| 			,tty_orig,12,0,0,0,0); | ||||
| #endif /* VMS */ | ||||
| #endif | ||||
| 	 | ||||
| 	if (ps >= 1) popsig(); | ||||
| 	if (stdin != tty) fclose(tty); | ||||
| @@ -204,59 +323,38 @@ error: | ||||
| 	return(!ok); | ||||
| 	} | ||||
|  | ||||
| int des_read_password(key,prompt,verify) | ||||
| des_cblock *key; | ||||
| char *prompt; | ||||
| int verify; | ||||
| static void pushsig() | ||||
| 	{ | ||||
| 	int ok; | ||||
| 	char buf[BUFSIZ],buff[BUFSIZ]; | ||||
| 	int i; | ||||
|  | ||||
| 	if ((ok=read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0) | ||||
| 		des_string_to_key(buf,key); | ||||
| 	bzero(buf,BUFSIZ); | ||||
| 	bzero(buff,BUFSIZ); | ||||
| 	return(ok); | ||||
| 	for (i=1; i<NX509_SIG; i++) | ||||
| 		savsig[i]=signal(i,recsig); | ||||
| 	} | ||||
|  | ||||
| int des_read_2passwords(key1,key2,prompt,verify) | ||||
| des_cblock *key1; | ||||
| des_cblock *key2; | ||||
| char *prompt; | ||||
| int verify; | ||||
| static void popsig() | ||||
| 	{ | ||||
| 	int ok; | ||||
| 	char buf[BUFSIZ],buff[BUFSIZ]; | ||||
| 	int i; | ||||
|  | ||||
| 	if ((ok=read_pw(buf,buff,BUFSIZ,prompt,verify)) == 0) | ||||
| 		des_string_to_2keys(buf,key1,key2); | ||||
| 	bzero(buf,BUFSIZ); | ||||
| 	bzero(buff,BUFSIZ); | ||||
| 	return(ok); | ||||
| 	for (i=1; i<NX509_SIG; i++) | ||||
| 		signal(i,savsig[i]); | ||||
| 	} | ||||
|  | ||||
| int des_read_pw_string(buf,length,prompt,verify) | ||||
| char *buf; | ||||
| int length; | ||||
| char *prompt; | ||||
| int verify; | ||||
| static void recsig(i) | ||||
| int i; | ||||
| 	{ | ||||
| 	char buff[BUFSIZ]; | ||||
| 	int ret; | ||||
|  | ||||
| 	ret=read_pw(buf,buff,(length>BUFSIZ)?BUFSIZ:length,prompt,verify); | ||||
| 	bzero(buff,BUFSIZ); | ||||
| 	return(ret); | ||||
| 	longjmp(save,1); | ||||
| #ifdef LINT | ||||
| 	i=i; | ||||
| #endif | ||||
| 	} | ||||
|  | ||||
|  | ||||
| #ifdef MSDOS | ||||
| static int noecho_fgets(buf,size,tty) | ||||
| char *buf; | ||||
| int size; | ||||
| FILE *tty; | ||||
| 	{ | ||||
| 	int i; | ||||
| 	int i,n; | ||||
| 	char *p; | ||||
|  | ||||
| 	p=buf; | ||||
| @@ -277,5 +375,6 @@ FILE *tty; | ||||
| 			break; | ||||
| 			} | ||||
| 		} | ||||
| 	return(strlen(buf)); | ||||
| 	} | ||||
| #endif | ||||
|   | ||||
| @@ -1,9 +1,86 @@ | ||||
| #include "des_locl.h" | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #include "config.h" | ||||
| #include "protos.h" | ||||
|  | ||||
| RCSID("$Id$"); | ||||
| #endif | ||||
|  | ||||
| #include <des.h> | ||||
|  | ||||
| #include <sys/bitypes.h> | ||||
| #include <sys/time.h> | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <fcntl.h> | ||||
|  | ||||
| /* | ||||
|  * Generate "random" data by checksumming a file. | ||||
|  * | ||||
|  * Returns -1 if there were any problems with permissions or I/O | ||||
|  * errors. | ||||
|  */ | ||||
| static | ||||
| int | ||||
| sumFile (const char *name, int len, void *sum_) | ||||
| { | ||||
|   int32_t *sum = sum_; | ||||
|   int32_t buf[1024*2]; | ||||
|   int fd, i; | ||||
|  | ||||
|   fd = open (name, 0); | ||||
|   if (fd < 0) | ||||
|     return -1; | ||||
|  | ||||
|   while (len > 0) | ||||
|     { | ||||
|       int n = read(fd, buf, sizeof(buf)); | ||||
|       if (n < 0) | ||||
| 	{ | ||||
| 	  close(fd); | ||||
| 	  return n; | ||||
| 	} | ||||
|       for (i = 0; i < (n/sizeof(buf[0])); i++) | ||||
| 	{ | ||||
| 	  sum[0] += buf[i]; | ||||
| 	  i++; | ||||
| 	  sum[1] += buf[i]; | ||||
| 	} | ||||
|       len -= n; | ||||
|     } | ||||
|   close (fd); | ||||
|   return 0; | ||||
| } | ||||
|  | ||||
| #if 0 | ||||
| static | ||||
| int | ||||
| md5sumFile (const char *name, int len, int32_t sum[4]) | ||||
| { | ||||
|   int32_t buf[1024*2]; | ||||
|   int fd, cnt; | ||||
|   struct md5 md5; | ||||
|  | ||||
|   fd = open (name, 0); | ||||
|   if (fd < 0) | ||||
|     return -1; | ||||
|  | ||||
|   md5_init(&md5); | ||||
|   while (len > 0) | ||||
|     { | ||||
|       int n = read(fd, buf, sizeof(buf)); | ||||
|       if (n < 0) | ||||
| 	{ | ||||
| 	  close(fd); | ||||
| 	  return n; | ||||
| 	} | ||||
|       md5_update(&md5, buf, n); | ||||
|       len -= n; | ||||
|     } | ||||
|   md5_finito(&md5, (unsigned char *)sum); | ||||
|   close (fd); | ||||
|   return 0; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Create a sequence of random 64 bit blocks. | ||||
| @@ -31,18 +108,15 @@ sigALRM(int sig) | ||||
|     if (igdata < gsize) | ||||
| 	gdata[igdata++] ^= counter & 0xff; | ||||
|  | ||||
| #ifdef VOID_RETSIGTYPE | ||||
|     return; | ||||
| #else | ||||
|     return (RETSIGTYPE)0; | ||||
| #endif | ||||
|     SIGRETURN(0); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Generate size bytes of "random" data using timed interrupts. | ||||
|  * This is a slooow routine but it's meant to be slow. | ||||
|  * It takes about 40ms/byte random data. | ||||
|  * It's not neccessary to be root to run it. | ||||
|  */ | ||||
| static | ||||
| void | ||||
| des_rand_data(unsigned char *data, int size) | ||||
| { | ||||
| @@ -61,6 +135,10 @@ des_rand_data(unsigned char *data, int size) | ||||
| 	  close(fd); | ||||
|     } | ||||
|  | ||||
|     /* Paranoia? Initialize data from /dev/mem if we can read it. */ | ||||
|     if (size >= 8) | ||||
|       sumFile("/dev/mem", (1024*1024*2), data); | ||||
|  | ||||
|     gdata = data; | ||||
|     gsize = size; | ||||
|     igdata = 0; | ||||
| @@ -137,7 +215,7 @@ do_initialize(void) | ||||
| { | ||||
|     des_cblock default_seed; | ||||
|     do { | ||||
| 	des_rand_data((unsigned char*)&default_seed, sizeof(default_seed)); | ||||
| 	des_generate_random_block(&default_seed); | ||||
| 	des_set_odd_parity(&default_seed); | ||||
|     } while (des_is_weak_key(&default_seed)); | ||||
|     des_init_random_number_generator(&default_seed); | ||||
| @@ -205,16 +283,15 @@ void | ||||
| des_init_random_number_generator(des_cblock *seed) | ||||
| { | ||||
|     struct timeval now; | ||||
|     static u_int32_t uniq[2]; | ||||
|     des_cblock uniq; | ||||
|     des_cblock new_key; | ||||
|  | ||||
|     gettimeofday(&now, (struct timezone *)0); | ||||
|     if (uniq[0] == 0 && uniq[1] == 0) | ||||
| 	des_rand_data((unsigned char *)uniq, sizeof(uniq)); | ||||
|     des_generate_random_block(&uniq); | ||||
|  | ||||
|     /* Pick a unique random key from the shared sequence. */ | ||||
|     des_set_random_generator_seed(seed); | ||||
|     set_sequence_number((unsigned char *)uniq); | ||||
|     set_sequence_number((unsigned char *)&uniq); | ||||
|     des_new_random_key(&new_key); | ||||
|  | ||||
|     /* Select a new nonshared sequence, */ | ||||
| @@ -227,10 +304,10 @@ des_init_random_number_generator(des_cblock *seed) | ||||
| } | ||||
|  | ||||
| /* This is for backwards compatibility. */ | ||||
| int | ||||
| des_random_key(unsigned char *ret) | ||||
| void | ||||
| des_random_key(des_cblock ret) | ||||
| { | ||||
|     return des_new_random_key((des_cblock *) ret); | ||||
|     des_new_random_key((des_cblock *)ret); | ||||
| } | ||||
|  | ||||
| #ifdef TESTRUN | ||||
| @@ -242,7 +319,8 @@ main() | ||||
|  | ||||
|     while (1) | ||||
|         { | ||||
|             des_rand_data(data, 8); | ||||
| 	    if (sumFile("/dev/mem", (1024*1024*8), data) != 0) | ||||
| 	      { perror("sumFile"); exit(1); } | ||||
|             for (i = 0; i < 8; i++) | ||||
|                 printf("%02x", data[i]); | ||||
|             printf("\n"); | ||||
| @@ -254,7 +332,7 @@ main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|     unsigned char data[8]; | ||||
|     des_cblock data; | ||||
|     int i; | ||||
|  | ||||
|     while (1) | ||||
|   | ||||
							
								
								
									
										68
									
								
								lib/des/rpc_des.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								lib/des/rpc_des.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| /*  @(#)des.h	2.2 88/08/10 4.0 RPCSRC; from 2.7 88/02/08 SMI  */ | ||||
| /* | ||||
|  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for | ||||
|  * unrestricted use provided that this legend is included on all tape | ||||
|  * media and as a part of the software program in whole or part.  Users | ||||
|  * may copy or modify Sun RPC without charge, but are not authorized | ||||
|  * to license or distribute it to anyone else except as part of a product or | ||||
|  * program developed by the user. | ||||
|  *  | ||||
|  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE | ||||
|  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR | ||||
|  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. | ||||
|  *  | ||||
|  * Sun RPC is provided with no support and without any obligation on the | ||||
|  * part of Sun Microsystems, Inc. to assist in its use, correction, | ||||
|  * modification or enhancement. | ||||
|  *  | ||||
|  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE | ||||
|  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC | ||||
|  * OR ANY PART THEREOF. | ||||
|  *  | ||||
|  * In no event will Sun Microsystems, Inc. be liable for any lost revenue | ||||
|  * or profits or other special, indirect and consequential damages, even if | ||||
|  * Sun has been advised of the possibility of such damages. | ||||
|  *  | ||||
|  * Sun Microsystems, Inc. | ||||
|  * 2550 Garcia Avenue | ||||
|  * Mountain View, California  94043 | ||||
|  */ | ||||
| /* | ||||
|  * Generic DES driver interface | ||||
|  * Keep this file hardware independent! | ||||
|  * Copyright (c) 1986 by Sun Microsystems, Inc. | ||||
|  */ | ||||
|  | ||||
| #define DES_MAXLEN 	65536	/* maximum # of bytes to encrypt  */ | ||||
| #define DES_QUICKLEN	16	/* maximum # of bytes to encrypt quickly */ | ||||
|  | ||||
| enum desdir { ENCRYPT, DECRYPT }; | ||||
| enum desmode { CBC, ECB }; | ||||
|  | ||||
| /* | ||||
|  * parameters to ioctl call | ||||
|  */ | ||||
| struct desparams { | ||||
| 	unsigned char des_key[8];	/* key (with low bit parity) */ | ||||
| 	enum desdir des_dir;	/* direction */ | ||||
| 	enum desmode des_mode;	/* mode */ | ||||
| 	unsigned char des_ivec[8];	/* input vector */ | ||||
| 	unsigned des_len;	/* number of bytes to crypt */ | ||||
| 	union { | ||||
| 		unsigned char UDES_data[DES_QUICKLEN]; | ||||
| 		unsigned char *UDES_buf; | ||||
| 	} UDES; | ||||
| #	define des_data UDES.UDES_data	/* direct data here if quick */ | ||||
| #	define des_buf	UDES.UDES_buf	/* otherwise, pointer to data */ | ||||
| }; | ||||
|  | ||||
| /* | ||||
|  * Encrypt an arbitrary sized buffer | ||||
|  */ | ||||
| #define	DESIOCBLOCK	_IOWR(d, 6, struct desparams) | ||||
|  | ||||
| /*  | ||||
|  * Encrypt of small amount of data, quickly | ||||
|  */ | ||||
| #define DESIOCQUICK	_IOWR(d, 7, struct desparams)  | ||||
|  | ||||
							
								
								
									
										96
									
								
								lib/des/rpc_enc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								lib/des/rpc_enc.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| /* lib/des/rpc_enc.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "rpc_des.h" | ||||
| #include "des_locl.h" | ||||
| #include "version.h" | ||||
|  | ||||
| #ifdef PROTO | ||||
| int _des_crypt(char *buf,int len,struct desparams *desp); | ||||
| #else | ||||
| int _des_crypt(); | ||||
| #endif | ||||
|  | ||||
| int _des_crypt(buf, len, desp) | ||||
| char *buf; | ||||
| int len; | ||||
| struct desparams *desp; | ||||
| 	{ | ||||
| 	Key_schedule ks; | ||||
| 	int enc; | ||||
|  | ||||
| 	des_set_key((des_cblock *)desp->des_key,ks); | ||||
| 	enc=(desp->des_dir == ENCRYPT)?DES_ENCRYPT:DES_DECRYPT; | ||||
|  | ||||
| 	if (desp->des_mode == CBC) | ||||
| 		des_ecb_encrypt((des_cblock *)desp->UDES.UDES_buf, | ||||
| 				(des_cblock *)desp->UDES.UDES_buf,ks,enc); | ||||
| 	else | ||||
| 		{ | ||||
| 		des_ncbc_encrypt((des_cblock *)desp->UDES.UDES_buf, | ||||
| 				(des_cblock *)desp->UDES.UDES_buf, | ||||
| 				(long)len,ks, | ||||
| 				(des_cblock *)desp->des_ivec,enc); | ||||
| #ifdef undef | ||||
| 		/* len will always be %8 if called from common_crypt | ||||
| 		 * in secure_rpc. | ||||
| 		 * Libdes's cbc encrypt does not copy back the iv, | ||||
| 		 * so we have to do it here. */ | ||||
| 		/* It does now :-) eay 20/09/95 */ | ||||
|  | ||||
| 		a=(char *)&(desp->UDES.UDES_buf[len-8]); | ||||
| 		b=(char *)&(desp->des_ivec[0]); | ||||
|  | ||||
| 		*(a++)= *(b++); *(a++)= *(b++); | ||||
| 		*(a++)= *(b++); *(a++)= *(b++); | ||||
| 		*(a++)= *(b++); *(a++)= *(b++); | ||||
| 		*(a++)= *(b++); *(a++)= *(b++); | ||||
| #endif | ||||
| 		} | ||||
| 	return(1);	 | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										119
									
								
								lib/des/rpw.c
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								lib/des/rpw.c
									
									
									
									
									
								
							| @@ -1,37 +1,90 @@ | ||||
| /* rpw.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/rpw.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include "des.h" | ||||
|  | ||||
| void | ||||
| main(void) | ||||
| { | ||||
|   des_cblock k,k1; | ||||
|   int i; | ||||
| int main(argc,argv) | ||||
| int argc; | ||||
| char *argv[]; | ||||
| 	{ | ||||
| 	des_cblock k,k1; | ||||
| 	int i; | ||||
|  | ||||
|   printf("read passwd\n"); | ||||
|   if ((i=des_read_password((des_cblock *)k,"Enter password:",0)) == 0) | ||||
|     { | ||||
|       printf("password = "); | ||||
|       for (i=0; i<8; i++) | ||||
| 	printf("%02x ",k[i]); | ||||
|     } | ||||
|   else | ||||
|     printf("error %d\n",i); | ||||
|   printf("\n"); | ||||
|   printf("read 2passwds and verify\n"); | ||||
|   if ((i=des_read_2passwords((des_cblock *)k,(des_cblock *)k1, | ||||
| 			     "Enter verified password:",1)) == 0) | ||||
|     { | ||||
|       printf("password1 = "); | ||||
|       for (i=0; i<8; i++) | ||||
| 	printf("%02x ",k[i]); | ||||
|       printf("\n"); | ||||
|       printf("password2 = "); | ||||
|       for (i=0; i<8; i++) | ||||
| 	printf("%02x ",k1[i]); | ||||
|       printf("\n"); | ||||
|     } | ||||
|   else | ||||
|     printf("error %d\n",i); | ||||
| } | ||||
| 	printf("read passwd\n"); | ||||
| 	if ((i=des_read_password((C_Block *)k,"Enter password:",0)) == 0) | ||||
| 		{ | ||||
| 		printf("password = "); | ||||
| 		for (i=0; i<8; i++) | ||||
| 			printf("%02x ",k[i]); | ||||
| 		} | ||||
| 	else | ||||
| 		printf("error %d\n",i); | ||||
| 	printf("\n"); | ||||
| 	printf("read 2passwds and verify\n"); | ||||
| 	if ((i=des_read_2passwords((C_Block *)k,(C_Block *)k1, | ||||
| 		"Enter verified password:",1)) == 0) | ||||
| 		{ | ||||
| 		printf("password1 = "); | ||||
| 		for (i=0; i<8; i++) | ||||
| 			printf("%02x ",k[i]); | ||||
| 		printf("\n"); | ||||
| 		printf("password2 = "); | ||||
| 		for (i=0; i<8; i++) | ||||
| 			printf("%02x ",k1[i]); | ||||
| 		printf("\n"); | ||||
| 		exit(1); | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		printf("error %d\n",i); | ||||
| 		exit(0); | ||||
| 		} | ||||
| #ifdef LINT | ||||
| 	return(0); | ||||
| #endif | ||||
| 	} | ||||
|   | ||||
| @@ -1,5 +1,50 @@ | ||||
| /* set_key.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/set_key.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| /* set_key.c v 1.4 eay 24/9/91 | ||||
|  * 1.4 Speed up by 400% :-) | ||||
|  * 1.3 added register declarations. | ||||
| @@ -11,29 +56,35 @@ | ||||
| #include "podd.h" | ||||
| #include "sk.h" | ||||
|  | ||||
| #ifdef PROTO | ||||
| static int check_parity(des_cblock (*key)); | ||||
| #else | ||||
| static int check_parity(); | ||||
| #endif | ||||
|  | ||||
| int des_check_key=0; | ||||
|  | ||||
| void des_set_odd_parity(des_cblock (*key)) | ||||
| { | ||||
|   int i; | ||||
| void des_set_odd_parity(key) | ||||
| des_cblock (*key); | ||||
| 	{ | ||||
| 	int i; | ||||
|  | ||||
|   for (i=0; i<DES_KEY_SZ; i++) | ||||
|     (*key)[i]=odd_parity[(*key)[i]]; | ||||
| } | ||||
| 	for (i=0; i<DES_KEY_SZ; i++) | ||||
| 		(*key)[i]=odd_parity[(*key)[i]]; | ||||
| 	} | ||||
|  | ||||
| static int check_parity(des_cblock (*key)) | ||||
| { | ||||
|   int i; | ||||
| static int check_parity(key) | ||||
| des_cblock (*key); | ||||
| 	{ | ||||
| 	int i; | ||||
|  | ||||
|   for (i=0; i<DES_KEY_SZ; i++) | ||||
|     { | ||||
|       if ((*key)[i] != odd_parity[(*key)[i]]) | ||||
| 	return(0); | ||||
|     } | ||||
|   return(1); | ||||
| } | ||||
| 	for (i=0; i<DES_KEY_SZ; i++) | ||||
| 		{ | ||||
| 		if ((*key)[i] != odd_parity[(*key)[i]]) | ||||
| 			return(0); | ||||
| 		} | ||||
| 	return(1); | ||||
| 	} | ||||
|  | ||||
| /* Weak and semi week keys as take from | ||||
|  * %A D.W. Davies | ||||
| @@ -46,133 +97,138 @@ static int check_parity(des_cblock (*key)) | ||||
|  */ | ||||
| #define NUM_WEAK_KEY	16 | ||||
| static des_cblock weak_keys[NUM_WEAK_KEY]={ | ||||
|   /* weak keys */ | ||||
|   0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, | ||||
|   0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, | ||||
|   0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F, | ||||
|   0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0, | ||||
|   /* semi-weak keys */ | ||||
|   0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE, | ||||
|   0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01, | ||||
|   0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1, | ||||
|   0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E, | ||||
|   0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1, | ||||
|   0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01, | ||||
|   0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE, | ||||
|   0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E, | ||||
|   0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E, | ||||
|   0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01, | ||||
|   0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE, | ||||
|   0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}; | ||||
| 	/* weak keys */ | ||||
| 	{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, | ||||
| 	{0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE}, | ||||
| 	{0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, | ||||
| 	{0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0}, | ||||
| 	/* semi-weak keys */ | ||||
| 	{0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE}, | ||||
| 	{0xFE,0x01,0xFE,0x01,0xFE,0x01,0xFE,0x01}, | ||||
| 	{0x1F,0xE0,0x1F,0xE0,0x0E,0xF1,0x0E,0xF1}, | ||||
| 	{0xE0,0x1F,0xE0,0x1F,0xF1,0x0E,0xF1,0x0E}, | ||||
| 	{0x01,0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1}, | ||||
| 	{0xE0,0x01,0xE0,0x01,0xF1,0x01,0xF1,0x01}, | ||||
| 	{0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E,0xFE}, | ||||
| 	{0xFE,0x1F,0xFE,0x1F,0xFE,0x0E,0xFE,0x0E}, | ||||
| 	{0x01,0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E}, | ||||
| 	{0x1F,0x01,0x1F,0x01,0x0E,0x01,0x0E,0x01}, | ||||
| 	{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE}, | ||||
| 	{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}}; | ||||
|  | ||||
| int des_is_weak_key(des_cblock (*key)) | ||||
| { | ||||
|   int i; | ||||
| int des_is_weak_key(key) | ||||
| des_cblock (*key); | ||||
| 	{ | ||||
| 	int i; | ||||
|  | ||||
|   for (i=0; i<NUM_WEAK_KEY; i++) | ||||
|     /* Added == 0 to comparision, I obviously don't run | ||||
|      * this section very often :-(, thanks to | ||||
|      * engineering@MorningStar.Com for the fix | ||||
|      * eay 93/06/29 */ | ||||
|     if (memcmp(weak_keys[i],key,sizeof(key)) == 0) return(1); | ||||
|   return(0); | ||||
| } | ||||
| 	for (i=0; i<NUM_WEAK_KEY; i++) | ||||
| 		/* Added == 0 to comparision, I obviously don't run | ||||
| 		 * this section very often :-(, thanks to | ||||
| 		 * engineering@MorningStar.Com for the fix | ||||
| 		 * eay 93/06/29 */ | ||||
| 		if (memcmp(weak_keys[i],key,sizeof(key)) == 0) return(1); | ||||
| 	return(0); | ||||
| 	} | ||||
|  | ||||
| /* NOW DEFINED IN des_local.h | ||||
|  * See ecb_encrypt.c for a pseudo description of these macros.  | ||||
|  * #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\ | ||||
| 			       * 	(b)^=(t),\ | ||||
| 			       * 	(a)=((a)^((t)<<(n)))) | ||||
| 			       */ | ||||
|  * 	(b)^=(t),\ | ||||
|  * 	(a)=((a)^((t)<<(n)))) | ||||
|  */ | ||||
|  | ||||
| #define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\ | ||||
| 			   (a)=(a)^(t)^(t>>(16-(n)))) | ||||
| 	(a)=(a)^(t)^(t>>(16-(n)))) | ||||
|  | ||||
| static char shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; | ||||
| 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. | ||||
|  */ | ||||
| int des_set_key(des_cblock (*key), struct des_ks_struct *schedule) | ||||
| { | ||||
|   register u_int32_t c,d,t,s; | ||||
|   register unsigned char *in; | ||||
|   register u_int32_t *k; | ||||
|   register int i; | ||||
| int des_set_key(key, schedule) | ||||
| des_cblock (*key); | ||||
| des_key_schedule schedule; | ||||
| 	{ | ||||
| 	register unsigned long c,d,t,s; | ||||
| 	register unsigned char *in; | ||||
| 	register unsigned long *k; | ||||
| 	register int i; | ||||
|  | ||||
|   if (des_check_key) | ||||
|     { | ||||
|       if (!check_parity(key)) | ||||
| 	return(-1); | ||||
| 	if (des_check_key) | ||||
| 		{ | ||||
| 		if (!check_parity(key)) | ||||
| 			return(-1); | ||||
|  | ||||
|       if (des_is_weak_key(key)) | ||||
| 	return(-2); | ||||
|     } | ||||
| 		if (des_is_weak_key(key)) | ||||
| 			return(-2); | ||||
| 		} | ||||
|  | ||||
|   k=(u_int32_t *)schedule; | ||||
|   in=(unsigned char *)key; | ||||
| 	k=(unsigned long *)schedule; | ||||
| 	in=(unsigned char *)key; | ||||
|  | ||||
|   c2l(in,c); | ||||
|   c2l(in,d); | ||||
| 	c2l(in,c); | ||||
| 	c2l(in,d); | ||||
|  | ||||
|   /* do PC1 in 60 simple operations */  | ||||
|   /*	PERM_OP(d,c,t,4,0x0f0f0f0f); | ||||
| 	HPERM_OP(c,t,-2, 0xcccc0000); | ||||
| 	HPERM_OP(c,t,-1, 0xaaaa0000); | ||||
| 	HPERM_OP(c,t, 8, 0x00ff0000); | ||||
| 	HPERM_OP(c,t,-1, 0xaaaa0000); | ||||
| 	HPERM_OP(d,t,-8, 0xff000000); | ||||
| 	HPERM_OP(d,t, 8, 0x00ff0000); | ||||
| 	HPERM_OP(d,t, 2, 0x33330000); | ||||
| 	d=((d&0x00aa00aa)<<7)|((d&0x55005500)>>7)|(d&0xaa55aa55); | ||||
| 	d=(d>>8)|((c&0xf0000000)>>4); | ||||
| 	c&=0x0fffffff; */ | ||||
| 	/* do PC1 in 60 simple operations */  | ||||
| /*	PERM_OP(d,c,t,4,0x0f0f0f0fL); | ||||
| 	HPERM_OP(c,t,-2, 0xcccc0000L); | ||||
| 	HPERM_OP(c,t,-1, 0xaaaa0000L); | ||||
| 	HPERM_OP(c,t, 8, 0x00ff0000L); | ||||
| 	HPERM_OP(c,t,-1, 0xaaaa0000L); | ||||
| 	HPERM_OP(d,t,-8, 0xff000000L); | ||||
| 	HPERM_OP(d,t, 8, 0x00ff0000L); | ||||
| 	HPERM_OP(d,t, 2, 0x33330000L); | ||||
| 	d=((d&0x00aa00aaL)<<7L)|((d&0x55005500L)>>7L)|(d&0xaa55aa55L); | ||||
| 	d=(d>>8)|((c&0xf0000000L)>>4); | ||||
| 	c&=0x0fffffffL; */ | ||||
|  | ||||
|   /* I now do it in 47 simple operations :-) | ||||
|    * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov) | ||||
|    * for the inspiration. :-) */ | ||||
|   PERM_OP (d,c,t,4,0x0f0f0f0f); | ||||
|   HPERM_OP(c,t,-2,0xcccc0000); | ||||
|   HPERM_OP(d,t,-2,0xcccc0000); | ||||
|   PERM_OP (d,c,t,1,0x55555555); | ||||
|   PERM_OP (c,d,t,8,0x00ff00ff); | ||||
|   PERM_OP (d,c,t,1,0x55555555); | ||||
|   d=	(((d&0x000000ff)<<16)| (d&0x0000ff00)     | | ||||
| 	 ((d&0x00ff0000)>>16)|((c&0xf0000000)>>4)); | ||||
|   c&=0x0fffffff; | ||||
| 	/* I now do it in 47 simple operations :-) | ||||
| 	 * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov) | ||||
| 	 * for the inspiration. :-) */ | ||||
| 	PERM_OP (d,c,t,4,0x0f0f0f0fL); | ||||
| 	HPERM_OP(c,t,-2,0xcccc0000L); | ||||
| 	HPERM_OP(d,t,-2,0xcccc0000L); | ||||
| 	PERM_OP (d,c,t,1,0x55555555L); | ||||
| 	PERM_OP (c,d,t,8,0x00ff00ffL); | ||||
| 	PERM_OP (d,c,t,1,0x55555555L); | ||||
| 	d=	(((d&0x000000ffL)<<16L)| (d&0x0000ff00L)     | | ||||
| 		 ((d&0x00ff0000L)>>16L)|((c&0xf0000000L)>>4L)); | ||||
| 	c&=0x0fffffffL; | ||||
|  | ||||
|   for (i=0; i<ITERATIONS; i++) | ||||
|     { | ||||
|       if (shifts2[i]) | ||||
| 	{ c=((c>>2)|(c<<26)); d=((d>>2)|(d<<26)); } | ||||
|       else | ||||
| 	{ c=((c>>1)|(c<<27)); d=((d>>1)|(d<<27)); } | ||||
|       c&=0x0fffffff; | ||||
|       d&=0x0fffffff; | ||||
|       /* could be a few less shifts but I am to lazy at this | ||||
|        * point in time to investigate */ | ||||
|       s=	des_skb[0][ (c    )&0x3f                ]| | ||||
| 	des_skb[1][((c>> 6)&0x03)|((c>> 7)&0x3c)]| | ||||
| 	  des_skb[2][((c>>13)&0x0f)|((c>>14)&0x30)]| | ||||
| 	    des_skb[3][((c>>20)&0x01)|((c>>21)&0x06) | | ||||
| 		       ((c>>22)&0x38)]; | ||||
|       t=	des_skb[4][ (d    )&0x3f                ]| | ||||
| 	des_skb[5][((d>> 7)&0x03)|((d>> 8)&0x3c)]| | ||||
| 	  des_skb[6][ (d>>15)&0x3f                ]| | ||||
| 	    des_skb[7][((d>>21)&0x0f)|((d>>22)&0x30)]; | ||||
| 	for (i=0; i<ITERATIONS; i++) | ||||
| 		{ | ||||
| 		if (shifts2[i]) | ||||
| 			{ c=((c>>2L)|(c<<26L)); d=((d>>2L)|(d<<26L)); } | ||||
| 		else | ||||
| 			{ c=((c>>1L)|(c<<27L)); d=((d>>1L)|(d<<27L)); } | ||||
| 		c&=0x0fffffffL; | ||||
| 		d&=0x0fffffffL; | ||||
| 		/* could be a few less shifts but I am to lazy at this | ||||
| 		 * point in time to investigate */ | ||||
| 		s=	des_skb[0][ (c    )&0x3f                ]| | ||||
| 			des_skb[1][((c>> 6)&0x03)|((c>> 7L)&0x3c)]| | ||||
| 			des_skb[2][((c>>13)&0x0f)|((c>>14L)&0x30)]| | ||||
| 			des_skb[3][((c>>20)&0x01)|((c>>21L)&0x06) | | ||||
| 						  ((c>>22L)&0x38)]; | ||||
| 		t=	des_skb[4][ (d    )&0x3f                ]| | ||||
| 			des_skb[5][((d>> 7L)&0x03)|((d>> 8L)&0x3c)]| | ||||
| 			des_skb[6][ (d>>15L)&0x3f                ]| | ||||
| 			des_skb[7][((d>>21L)&0x0f)|((d>>22L)&0x30)]; | ||||
|  | ||||
|       /* table contained 0213 4657 */ | ||||
|       *(k++)=((t<<16)|(s&0x0000ffff))&0xffffffff; | ||||
|       s=     ((s>>16)|(t&0xffff0000)); | ||||
| 		/* table contained 0213 4657 */ | ||||
| 		*(k++)=((t<<16L)|(s&0x0000ffffL))&0xffffffffL; | ||||
| 		s=     ((s>>16L)|(t&0xffff0000L)); | ||||
| 		 | ||||
|       s=(s<<4)|(s>>28); | ||||
|       *(k++)=s&0xffffffff; | ||||
|     } | ||||
|   return(0); | ||||
| } | ||||
| 		s=(s<<4L)|(s>>28L); | ||||
| 		*(k++)=s&0xffffffffL; | ||||
| 		} | ||||
| 	return(0); | ||||
| 	} | ||||
|  | ||||
| int des_key_sched(des_cblock *key, des_key_schedule schedule) | ||||
| { | ||||
|   return(des_set_key(key, (struct des_ks_struct *)schedule)); | ||||
| } | ||||
| int des_key_sched(key, schedule) | ||||
| des_cblock (*key); | ||||
| des_key_schedule schedule; | ||||
| 	{ | ||||
| 	return(des_set_key(key,schedule)); | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										317
									
								
								lib/des/sk.h
									
									
									
									
									
								
							
							
						
						
									
										317
									
								
								lib/des/sk.h
									
									
									
									
									
								
							| @@ -1,140 +1,193 @@ | ||||
| /* sk.h */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| static u_int32_t des_skb[8][64]={ | ||||
| /* lib/des/sk.h */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| static const unsigned long des_skb[8][64]={ | ||||
| { | ||||
| /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ | ||||
| 0x00000000,0x00000010,0x20000000,0x20000010, | ||||
| 0x00010000,0x00010010,0x20010000,0x20010010, | ||||
| 0x00000800,0x00000810,0x20000800,0x20000810, | ||||
| 0x00010800,0x00010810,0x20010800,0x20010810, | ||||
| 0x00000020,0x00000030,0x20000020,0x20000030, | ||||
| 0x00010020,0x00010030,0x20010020,0x20010030, | ||||
| 0x00000820,0x00000830,0x20000820,0x20000830, | ||||
| 0x00010820,0x00010830,0x20010820,0x20010830, | ||||
| 0x00080000,0x00080010,0x20080000,0x20080010, | ||||
| 0x00090000,0x00090010,0x20090000,0x20090010, | ||||
| 0x00080800,0x00080810,0x20080800,0x20080810, | ||||
| 0x00090800,0x00090810,0x20090800,0x20090810, | ||||
| 0x00080020,0x00080030,0x20080020,0x20080030, | ||||
| 0x00090020,0x00090030,0x20090020,0x20090030, | ||||
| 0x00080820,0x00080830,0x20080820,0x20080830, | ||||
| 0x00090820,0x00090830,0x20090820,0x20090830, | ||||
| 0x00000000L,0x00000010L,0x20000000L,0x20000010L, | ||||
| 0x00010000L,0x00010010L,0x20010000L,0x20010010L, | ||||
| 0x00000800L,0x00000810L,0x20000800L,0x20000810L, | ||||
| 0x00010800L,0x00010810L,0x20010800L,0x20010810L, | ||||
| 0x00000020L,0x00000030L,0x20000020L,0x20000030L, | ||||
| 0x00010020L,0x00010030L,0x20010020L,0x20010030L, | ||||
| 0x00000820L,0x00000830L,0x20000820L,0x20000830L, | ||||
| 0x00010820L,0x00010830L,0x20010820L,0x20010830L, | ||||
| 0x00080000L,0x00080010L,0x20080000L,0x20080010L, | ||||
| 0x00090000L,0x00090010L,0x20090000L,0x20090010L, | ||||
| 0x00080800L,0x00080810L,0x20080800L,0x20080810L, | ||||
| 0x00090800L,0x00090810L,0x20090800L,0x20090810L, | ||||
| 0x00080020L,0x00080030L,0x20080020L,0x20080030L, | ||||
| 0x00090020L,0x00090030L,0x20090020L,0x20090030L, | ||||
| 0x00080820L,0x00080830L,0x20080820L,0x20080830L, | ||||
| 0x00090820L,0x00090830L,0x20090820L,0x20090830L, | ||||
| },{ | ||||
| /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */ | ||||
| 0x00000000,0x02000000,0x00002000,0x02002000, | ||||
| 0x00200000,0x02200000,0x00202000,0x02202000, | ||||
| 0x00000004,0x02000004,0x00002004,0x02002004, | ||||
| 0x00200004,0x02200004,0x00202004,0x02202004, | ||||
| 0x00000400,0x02000400,0x00002400,0x02002400, | ||||
| 0x00200400,0x02200400,0x00202400,0x02202400, | ||||
| 0x00000404,0x02000404,0x00002404,0x02002404, | ||||
| 0x00200404,0x02200404,0x00202404,0x02202404, | ||||
| 0x10000000,0x12000000,0x10002000,0x12002000, | ||||
| 0x10200000,0x12200000,0x10202000,0x12202000, | ||||
| 0x10000004,0x12000004,0x10002004,0x12002004, | ||||
| 0x10200004,0x12200004,0x10202004,0x12202004, | ||||
| 0x10000400,0x12000400,0x10002400,0x12002400, | ||||
| 0x10200400,0x12200400,0x10202400,0x12202400, | ||||
| 0x10000404,0x12000404,0x10002404,0x12002404, | ||||
| 0x10200404,0x12200404,0x10202404,0x12202404, | ||||
| 0x00000000L,0x02000000L,0x00002000L,0x02002000L, | ||||
| 0x00200000L,0x02200000L,0x00202000L,0x02202000L, | ||||
| 0x00000004L,0x02000004L,0x00002004L,0x02002004L, | ||||
| 0x00200004L,0x02200004L,0x00202004L,0x02202004L, | ||||
| 0x00000400L,0x02000400L,0x00002400L,0x02002400L, | ||||
| 0x00200400L,0x02200400L,0x00202400L,0x02202400L, | ||||
| 0x00000404L,0x02000404L,0x00002404L,0x02002404L, | ||||
| 0x00200404L,0x02200404L,0x00202404L,0x02202404L, | ||||
| 0x10000000L,0x12000000L,0x10002000L,0x12002000L, | ||||
| 0x10200000L,0x12200000L,0x10202000L,0x12202000L, | ||||
| 0x10000004L,0x12000004L,0x10002004L,0x12002004L, | ||||
| 0x10200004L,0x12200004L,0x10202004L,0x12202004L, | ||||
| 0x10000400L,0x12000400L,0x10002400L,0x12002400L, | ||||
| 0x10200400L,0x12200400L,0x10202400L,0x12202400L, | ||||
| 0x10000404L,0x12000404L,0x10002404L,0x12002404L, | ||||
| 0x10200404L,0x12200404L,0x10202404L,0x12202404L, | ||||
| },{ | ||||
| /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */ | ||||
| 0x00000000,0x00000001,0x00040000,0x00040001, | ||||
| 0x01000000,0x01000001,0x01040000,0x01040001, | ||||
| 0x00000002,0x00000003,0x00040002,0x00040003, | ||||
| 0x01000002,0x01000003,0x01040002,0x01040003, | ||||
| 0x00000200,0x00000201,0x00040200,0x00040201, | ||||
| 0x01000200,0x01000201,0x01040200,0x01040201, | ||||
| 0x00000202,0x00000203,0x00040202,0x00040203, | ||||
| 0x01000202,0x01000203,0x01040202,0x01040203, | ||||
| 0x08000000,0x08000001,0x08040000,0x08040001, | ||||
| 0x09000000,0x09000001,0x09040000,0x09040001, | ||||
| 0x08000002,0x08000003,0x08040002,0x08040003, | ||||
| 0x09000002,0x09000003,0x09040002,0x09040003, | ||||
| 0x08000200,0x08000201,0x08040200,0x08040201, | ||||
| 0x09000200,0x09000201,0x09040200,0x09040201, | ||||
| 0x08000202,0x08000203,0x08040202,0x08040203, | ||||
| 0x09000202,0x09000203,0x09040202,0x09040203, | ||||
| 0x00000000L,0x00000001L,0x00040000L,0x00040001L, | ||||
| 0x01000000L,0x01000001L,0x01040000L,0x01040001L, | ||||
| 0x00000002L,0x00000003L,0x00040002L,0x00040003L, | ||||
| 0x01000002L,0x01000003L,0x01040002L,0x01040003L, | ||||
| 0x00000200L,0x00000201L,0x00040200L,0x00040201L, | ||||
| 0x01000200L,0x01000201L,0x01040200L,0x01040201L, | ||||
| 0x00000202L,0x00000203L,0x00040202L,0x00040203L, | ||||
| 0x01000202L,0x01000203L,0x01040202L,0x01040203L, | ||||
| 0x08000000L,0x08000001L,0x08040000L,0x08040001L, | ||||
| 0x09000000L,0x09000001L,0x09040000L,0x09040001L, | ||||
| 0x08000002L,0x08000003L,0x08040002L,0x08040003L, | ||||
| 0x09000002L,0x09000003L,0x09040002L,0x09040003L, | ||||
| 0x08000200L,0x08000201L,0x08040200L,0x08040201L, | ||||
| 0x09000200L,0x09000201L,0x09040200L,0x09040201L, | ||||
| 0x08000202L,0x08000203L,0x08040202L,0x08040203L, | ||||
| 0x09000202L,0x09000203L,0x09040202L,0x09040203L, | ||||
| },{ | ||||
| /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */ | ||||
| 0x00000000,0x00100000,0x00000100,0x00100100, | ||||
| 0x00000008,0x00100008,0x00000108,0x00100108, | ||||
| 0x00001000,0x00101000,0x00001100,0x00101100, | ||||
| 0x00001008,0x00101008,0x00001108,0x00101108, | ||||
| 0x04000000,0x04100000,0x04000100,0x04100100, | ||||
| 0x04000008,0x04100008,0x04000108,0x04100108, | ||||
| 0x04001000,0x04101000,0x04001100,0x04101100, | ||||
| 0x04001008,0x04101008,0x04001108,0x04101108, | ||||
| 0x00020000,0x00120000,0x00020100,0x00120100, | ||||
| 0x00020008,0x00120008,0x00020108,0x00120108, | ||||
| 0x00021000,0x00121000,0x00021100,0x00121100, | ||||
| 0x00021008,0x00121008,0x00021108,0x00121108, | ||||
| 0x04020000,0x04120000,0x04020100,0x04120100, | ||||
| 0x04020008,0x04120008,0x04020108,0x04120108, | ||||
| 0x04021000,0x04121000,0x04021100,0x04121100, | ||||
| 0x04021008,0x04121008,0x04021108,0x04121108, | ||||
| 0x00000000L,0x00100000L,0x00000100L,0x00100100L, | ||||
| 0x00000008L,0x00100008L,0x00000108L,0x00100108L, | ||||
| 0x00001000L,0x00101000L,0x00001100L,0x00101100L, | ||||
| 0x00001008L,0x00101008L,0x00001108L,0x00101108L, | ||||
| 0x04000000L,0x04100000L,0x04000100L,0x04100100L, | ||||
| 0x04000008L,0x04100008L,0x04000108L,0x04100108L, | ||||
| 0x04001000L,0x04101000L,0x04001100L,0x04101100L, | ||||
| 0x04001008L,0x04101008L,0x04001108L,0x04101108L, | ||||
| 0x00020000L,0x00120000L,0x00020100L,0x00120100L, | ||||
| 0x00020008L,0x00120008L,0x00020108L,0x00120108L, | ||||
| 0x00021000L,0x00121000L,0x00021100L,0x00121100L, | ||||
| 0x00021008L,0x00121008L,0x00021108L,0x00121108L, | ||||
| 0x04020000L,0x04120000L,0x04020100L,0x04120100L, | ||||
| 0x04020008L,0x04120008L,0x04020108L,0x04120108L, | ||||
| 0x04021000L,0x04121000L,0x04021100L,0x04121100L, | ||||
| 0x04021008L,0x04121008L,0x04021108L,0x04121108L, | ||||
| },{ | ||||
| /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */ | ||||
| 0x00000000,0x10000000,0x00010000,0x10010000, | ||||
| 0x00000004,0x10000004,0x00010004,0x10010004, | ||||
| 0x20000000,0x30000000,0x20010000,0x30010000, | ||||
| 0x20000004,0x30000004,0x20010004,0x30010004, | ||||
| 0x00100000,0x10100000,0x00110000,0x10110000, | ||||
| 0x00100004,0x10100004,0x00110004,0x10110004, | ||||
| 0x20100000,0x30100000,0x20110000,0x30110000, | ||||
| 0x20100004,0x30100004,0x20110004,0x30110004, | ||||
| 0x00001000,0x10001000,0x00011000,0x10011000, | ||||
| 0x00001004,0x10001004,0x00011004,0x10011004, | ||||
| 0x20001000,0x30001000,0x20011000,0x30011000, | ||||
| 0x20001004,0x30001004,0x20011004,0x30011004, | ||||
| 0x00101000,0x10101000,0x00111000,0x10111000, | ||||
| 0x00101004,0x10101004,0x00111004,0x10111004, | ||||
| 0x20101000,0x30101000,0x20111000,0x30111000, | ||||
| 0x20101004,0x30101004,0x20111004,0x30111004, | ||||
| 0x00000000L,0x10000000L,0x00010000L,0x10010000L, | ||||
| 0x00000004L,0x10000004L,0x00010004L,0x10010004L, | ||||
| 0x20000000L,0x30000000L,0x20010000L,0x30010000L, | ||||
| 0x20000004L,0x30000004L,0x20010004L,0x30010004L, | ||||
| 0x00100000L,0x10100000L,0x00110000L,0x10110000L, | ||||
| 0x00100004L,0x10100004L,0x00110004L,0x10110004L, | ||||
| 0x20100000L,0x30100000L,0x20110000L,0x30110000L, | ||||
| 0x20100004L,0x30100004L,0x20110004L,0x30110004L, | ||||
| 0x00001000L,0x10001000L,0x00011000L,0x10011000L, | ||||
| 0x00001004L,0x10001004L,0x00011004L,0x10011004L, | ||||
| 0x20001000L,0x30001000L,0x20011000L,0x30011000L, | ||||
| 0x20001004L,0x30001004L,0x20011004L,0x30011004L, | ||||
| 0x00101000L,0x10101000L,0x00111000L,0x10111000L, | ||||
| 0x00101004L,0x10101004L,0x00111004L,0x10111004L, | ||||
| 0x20101000L,0x30101000L,0x20111000L,0x30111000L, | ||||
| 0x20101004L,0x30101004L,0x20111004L,0x30111004L, | ||||
| },{ | ||||
| /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */ | ||||
| 0x00000000,0x08000000,0x00000008,0x08000008, | ||||
| 0x00000400,0x08000400,0x00000408,0x08000408, | ||||
| 0x00020000,0x08020000,0x00020008,0x08020008, | ||||
| 0x00020400,0x08020400,0x00020408,0x08020408, | ||||
| 0x00000001,0x08000001,0x00000009,0x08000009, | ||||
| 0x00000401,0x08000401,0x00000409,0x08000409, | ||||
| 0x00020001,0x08020001,0x00020009,0x08020009, | ||||
| 0x00020401,0x08020401,0x00020409,0x08020409, | ||||
| 0x02000000,0x0A000000,0x02000008,0x0A000008, | ||||
| 0x02000400,0x0A000400,0x02000408,0x0A000408, | ||||
| 0x02020000,0x0A020000,0x02020008,0x0A020008, | ||||
| 0x02020400,0x0A020400,0x02020408,0x0A020408, | ||||
| 0x02000001,0x0A000001,0x02000009,0x0A000009, | ||||
| 0x02000401,0x0A000401,0x02000409,0x0A000409, | ||||
| 0x02020001,0x0A020001,0x02020009,0x0A020009, | ||||
| 0x02020401,0x0A020401,0x02020409,0x0A020409, | ||||
| 0x00000000L,0x08000000L,0x00000008L,0x08000008L, | ||||
| 0x00000400L,0x08000400L,0x00000408L,0x08000408L, | ||||
| 0x00020000L,0x08020000L,0x00020008L,0x08020008L, | ||||
| 0x00020400L,0x08020400L,0x00020408L,0x08020408L, | ||||
| 0x00000001L,0x08000001L,0x00000009L,0x08000009L, | ||||
| 0x00000401L,0x08000401L,0x00000409L,0x08000409L, | ||||
| 0x00020001L,0x08020001L,0x00020009L,0x08020009L, | ||||
| 0x00020401L,0x08020401L,0x00020409L,0x08020409L, | ||||
| 0x02000000L,0x0A000000L,0x02000008L,0x0A000008L, | ||||
| 0x02000400L,0x0A000400L,0x02000408L,0x0A000408L, | ||||
| 0x02020000L,0x0A020000L,0x02020008L,0x0A020008L, | ||||
| 0x02020400L,0x0A020400L,0x02020408L,0x0A020408L, | ||||
| 0x02000001L,0x0A000001L,0x02000009L,0x0A000009L, | ||||
| 0x02000401L,0x0A000401L,0x02000409L,0x0A000409L, | ||||
| 0x02020001L,0x0A020001L,0x02020009L,0x0A020009L, | ||||
| 0x02020401L,0x0A020401L,0x02020409L,0x0A020409L, | ||||
| },{ | ||||
| /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */ | ||||
| 0x00000000,0x00000100,0x00080000,0x00080100, | ||||
| 0x01000000,0x01000100,0x01080000,0x01080100, | ||||
| 0x00000010,0x00000110,0x00080010,0x00080110, | ||||
| 0x01000010,0x01000110,0x01080010,0x01080110, | ||||
| 0x00200000,0x00200100,0x00280000,0x00280100, | ||||
| 0x01200000,0x01200100,0x01280000,0x01280100, | ||||
| 0x00200010,0x00200110,0x00280010,0x00280110, | ||||
| 0x01200010,0x01200110,0x01280010,0x01280110, | ||||
| 0x00000200,0x00000300,0x00080200,0x00080300, | ||||
| 0x01000200,0x01000300,0x01080200,0x01080300, | ||||
| 0x00000210,0x00000310,0x00080210,0x00080310, | ||||
| 0x01000210,0x01000310,0x01080210,0x01080310, | ||||
| 0x00200200,0x00200300,0x00280200,0x00280300, | ||||
| 0x01200200,0x01200300,0x01280200,0x01280300, | ||||
| 0x00200210,0x00200310,0x00280210,0x00280310, | ||||
| 0x01200210,0x01200310,0x01280210,0x01280310, | ||||
| 0x00000000L,0x00000100L,0x00080000L,0x00080100L, | ||||
| 0x01000000L,0x01000100L,0x01080000L,0x01080100L, | ||||
| 0x00000010L,0x00000110L,0x00080010L,0x00080110L, | ||||
| 0x01000010L,0x01000110L,0x01080010L,0x01080110L, | ||||
| 0x00200000L,0x00200100L,0x00280000L,0x00280100L, | ||||
| 0x01200000L,0x01200100L,0x01280000L,0x01280100L, | ||||
| 0x00200010L,0x00200110L,0x00280010L,0x00280110L, | ||||
| 0x01200010L,0x01200110L,0x01280010L,0x01280110L, | ||||
| 0x00000200L,0x00000300L,0x00080200L,0x00080300L, | ||||
| 0x01000200L,0x01000300L,0x01080200L,0x01080300L, | ||||
| 0x00000210L,0x00000310L,0x00080210L,0x00080310L, | ||||
| 0x01000210L,0x01000310L,0x01080210L,0x01080310L, | ||||
| 0x00200200L,0x00200300L,0x00280200L,0x00280300L, | ||||
| 0x01200200L,0x01200300L,0x01280200L,0x01280300L, | ||||
| 0x00200210L,0x00200310L,0x00280210L,0x00280310L, | ||||
| 0x01200210L,0x01200310L,0x01280210L,0x01280310L, | ||||
| },{ | ||||
| /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */ | ||||
| 0x00000000,0x04000000,0x00040000,0x04040000, | ||||
| 0x00000002,0x04000002,0x00040002,0x04040002, | ||||
| 0x00002000,0x04002000,0x00042000,0x04042000, | ||||
| 0x00002002,0x04002002,0x00042002,0x04042002, | ||||
| 0x00000020,0x04000020,0x00040020,0x04040020, | ||||
| 0x00000022,0x04000022,0x00040022,0x04040022, | ||||
| 0x00002020,0x04002020,0x00042020,0x04042020, | ||||
| 0x00002022,0x04002022,0x00042022,0x04042022, | ||||
| 0x00000800,0x04000800,0x00040800,0x04040800, | ||||
| 0x00000802,0x04000802,0x00040802,0x04040802, | ||||
| 0x00002800,0x04002800,0x00042800,0x04042800, | ||||
| 0x00002802,0x04002802,0x00042802,0x04042802, | ||||
| 0x00000820,0x04000820,0x00040820,0x04040820, | ||||
| 0x00000822,0x04000822,0x00040822,0x04040822, | ||||
| 0x00002820,0x04002820,0x00042820,0x04042820, | ||||
| 0x00002822,0x04002822,0x00042822,0x04042822, | ||||
| }; | ||||
| 0x00000000L,0x04000000L,0x00040000L,0x04040000L, | ||||
| 0x00000002L,0x04000002L,0x00040002L,0x04040002L, | ||||
| 0x00002000L,0x04002000L,0x00042000L,0x04042000L, | ||||
| 0x00002002L,0x04002002L,0x00042002L,0x04042002L, | ||||
| 0x00000020L,0x04000020L,0x00040020L,0x04040020L, | ||||
| 0x00000022L,0x04000022L,0x00040022L,0x04040022L, | ||||
| 0x00002020L,0x04002020L,0x00042020L,0x04042020L, | ||||
| 0x00002022L,0x04002022L,0x00042022L,0x04042022L, | ||||
| 0x00000800L,0x04000800L,0x00040800L,0x04040800L, | ||||
| 0x00000802L,0x04000802L,0x00040802L,0x04040802L, | ||||
| 0x00002800L,0x04002800L,0x00042800L,0x04042800L, | ||||
| 0x00002802L,0x04002802L,0x00042802L,0x04042802L, | ||||
| 0x00000820L,0x04000820L,0x00040820L,0x04040820L, | ||||
| 0x00000822L,0x04000822L,0x00040822L,0x04040822L, | ||||
| 0x00002820L,0x04002820L,0x00042820L,0x04042820L, | ||||
| 0x00002822L,0x04002822L,0x00042822L,0x04042822L, | ||||
| }}; | ||||
|   | ||||
							
								
								
									
										355
									
								
								lib/des/speed.c
									
									
									
									
									
								
							
							
						
						
									
										355
									
								
								lib/des/speed.c
									
									
									
									
									
								
							| @@ -1,5 +1,50 @@ | ||||
| /* speed.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/speed.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| /* 11-Sep-92 Andrew Daviel   Support for Silicon Graphics IRIX added */ | ||||
| /* 06-Apr-92 Luke Brennan    Support for VMS and add extra signal calls */ | ||||
|  | ||||
| @@ -8,198 +53,258 @@ | ||||
| #endif | ||||
|  | ||||
| #include <stdio.h> | ||||
| #ifndef MSDOS | ||||
| #include <unistd.h> | ||||
| #else | ||||
| #include <io.h> | ||||
| #endif | ||||
| #include <signal.h> | ||||
| #ifndef VMS | ||||
| #if !(defined(_IRIX) || defined(sgi)) | ||||
| #ifndef _IRIX | ||||
| #include <time.h> | ||||
| #endif | ||||
| #ifdef TIMES | ||||
| #include <sys/types.h> | ||||
| #include <sys/times.h> | ||||
| #endif /* TIMES */ | ||||
| #endif | ||||
| #else /* VMS */ | ||||
| #include <types.h> | ||||
| struct tms { | ||||
|   time_t tms_utime; | ||||
|   time_t tms_stime; | ||||
|   time_t tms_uchild;		/* I dunno...  */ | ||||
|   time_t tms_uchildsys;		/* so these names are a guess :-) */ | ||||
| } | ||||
| 	time_t tms_utime; | ||||
| 	time_t tms_stime; | ||||
| 	time_t tms_uchild;	/* I dunno...  */ | ||||
| 	time_t tms_uchildsys;	/* so these names are a guess :-) */ | ||||
| 	} | ||||
| #endif | ||||
| #ifndef TIMES | ||||
| #include <sys/timeb.h> | ||||
| #endif | ||||
|  | ||||
| #ifdef sun | ||||
| #include <limits.h> | ||||
| #include <sys/param.h> | ||||
| #endif | ||||
|  | ||||
| #include "des.h" | ||||
|  | ||||
| /* The following if from times(3) man page.  It may need to be changed */ | ||||
| #ifndef HZ | ||||
| #ifndef CLK_TCK | ||||
| #ifndef VMS | ||||
| #define HZ	60.0 | ||||
| #define HZ	100.0 | ||||
| #else /* VMS */ | ||||
| #define HZ	100.0 | ||||
| #endif | ||||
| #else /* CLK_TCK */ | ||||
| #define HZ ((double)CLK_TCK) | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #define BUFSIZE	((long)1024*8) | ||||
| long run=0; | ||||
|  | ||||
| #ifdef PROTO | ||||
| double Time_F(int s); | ||||
| #else | ||||
| double Time_F(); | ||||
| #endif | ||||
|  | ||||
| #ifdef SIGALRM | ||||
| #ifdef __STDC__ | ||||
| #if defined(__STDC__) || defined(sgi) | ||||
| #define SIGRETTYPE void | ||||
| #else | ||||
| #define SIGRETTYPE int | ||||
| #endif | ||||
|  | ||||
| static SIGRETTYPE | ||||
| sig_done(int sig) | ||||
| { | ||||
|   signal(SIGALRM,sig_done); | ||||
|   run=0; | ||||
| } | ||||
| #ifdef PROTO | ||||
| SIGRETTYPE sig_done(int sig); | ||||
| #else | ||||
| SIGRETTYPE sig_done(); | ||||
| #endif | ||||
|  | ||||
| unsigned int alarm(int seconds); | ||||
| SIGRETTYPE sig_done(sig) | ||||
| int sig; | ||||
| 	{ | ||||
| 	signal(SIGALRM,sig_done); | ||||
| 	run=0; | ||||
| #ifdef LINT | ||||
| 	sig=sig; | ||||
| #endif | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| #define START	0 | ||||
| #define STOP	1 | ||||
|  | ||||
| static double | ||||
| Time_F(int s) | ||||
| { | ||||
|   double ret; | ||||
| double Time_F(s) | ||||
| int s; | ||||
| 	{ | ||||
| 	double ret; | ||||
| #ifdef TIMES | ||||
|   static struct tms tstart,tend; | ||||
| 	static struct tms tstart,tend; | ||||
|  | ||||
|   if (s == START) | ||||
|     { | ||||
|       times(&tstart); | ||||
|       return(0); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       times(&tend); | ||||
|       ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ; | ||||
|       return((ret == 0.0)?1e-6:ret); | ||||
|     } | ||||
| #else  /* !times() */ | ||||
|   static struct timeb tstart,tend; | ||||
|   long i; | ||||
| 	if (s == START) | ||||
| 		{ | ||||
| 		times(&tstart); | ||||
| 		return(0); | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		times(&tend); | ||||
| 		ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ; | ||||
| 		return((ret == 0.0)?1e-6:ret); | ||||
| 		} | ||||
| #else /* !times() */ | ||||
| 	static struct timeb tstart,tend; | ||||
| 	long i; | ||||
|  | ||||
|   if (s == START) | ||||
|     { | ||||
|       ftime(&tstart); | ||||
|       return(0); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       ftime(&tend); | ||||
|       i=(long)tend.millitm-(long)tstart.millitm; | ||||
|       ret=((double)(tend.time-tstart.time))+((double)i)/1000.0; | ||||
|       return((ret == 0.0)?1e-6:ret); | ||||
|     } | ||||
| 	if (s == START) | ||||
| 		{ | ||||
| 		ftime(&tstart); | ||||
| 		return(0); | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		ftime(&tend); | ||||
| 		i=(long)tend.millitm-(long)tstart.millitm; | ||||
| 		ret=((double)(tend.time-tstart.time))+((double)i)/1000.0; | ||||
| 		return((ret == 0.0)?1e-6:ret); | ||||
| 		} | ||||
| #endif | ||||
| } | ||||
| 	} | ||||
|  | ||||
| void | ||||
| main(int argc, char **argv) | ||||
| { | ||||
|   long count; | ||||
|   static unsigned char buf[BUFSIZE]; | ||||
|   static des_cblock key={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}; | ||||
|   des_key_schedule sch; | ||||
|   double d,a,b,c; | ||||
| #ifndef SIGALRM | ||||
|   long ca,cb,cc,cd; | ||||
| int main(argc,argv) | ||||
| int argc; | ||||
| char **argv; | ||||
| 	{ | ||||
| 	long count; | ||||
| 	static unsigned char buf[BUFSIZE]; | ||||
| 	static des_cblock key ={0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0}; | ||||
| 	static des_cblock key2={0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12}; | ||||
| 	static des_cblock key3={0x56,0x78,0x9a,0xbc,0xde,0xf0,0x12,0x34}; | ||||
| 	des_key_schedule sch,sch2,sch3; | ||||
| 	double a,b,c,d,e; | ||||
| #ifndef SIGALARM | ||||
| 	long ca,cb,cc,cd,ce; | ||||
| #endif | ||||
|  | ||||
| #ifndef TIMES | ||||
|   printf("To get the most acurate results, try to run this\n"); | ||||
|   printf("program when this computer is idle.\n"); | ||||
| 	printf("To get the most acurate results, try to run this\n"); | ||||
| 	printf("program when this computer is idle.\n"); | ||||
| #endif | ||||
|  | ||||
| 	des_set_key((C_Block *)key2,sch2); | ||||
| 	des_set_key((C_Block *)key3,sch3); | ||||
|  | ||||
| #ifndef SIGALRM | ||||
|   printf("First we calculate the aproximate speed ...\n"); | ||||
|   des_set_key((des_cblock *)key,sch); | ||||
|   count=10; | ||||
|   do	{ | ||||
|     int i; | ||||
|     count*=2; | ||||
|     Time_F(START); | ||||
|     for (i=count; i; i--) | ||||
|       des_ecb_encrypt((des_cblock *)buf,(des_cblock *)buf, | ||||
| 		      &(sch[0]),DES_ENCRYPT); | ||||
|     d=Time_F(STOP); | ||||
|   } while (d <3); | ||||
|   ca=count; | ||||
|   cb=count*10; | ||||
|   cc=count*10*8/BUFSIZE+1; | ||||
|   cd=count/20+1; | ||||
|   printf("Doing set_key %ld times\n",ca); | ||||
| 	printf("First we calculate the aproximate speed ...\n"); | ||||
| 	des_set_key((C_Block *)key,sch); | ||||
| 	count=10; | ||||
| 	do	{ | ||||
| 		long i; | ||||
|  | ||||
| 		count*=2; | ||||
| 		Time_F(START); | ||||
| 		for (i=count; i; i--) | ||||
| 			des_ecb_encrypt((C_Block *)buf,(C_Block *)buf, | ||||
| 				&(sch[0]),DES_ENCRYPT); | ||||
| 		d=Time_F(STOP); | ||||
| 		} while (d < 3.0); | ||||
| 	ca=count; | ||||
| 	cb=count*3; | ||||
| 	cc=count*3*8/BUFSIZE+1; | ||||
| 	cd=count*8/BUFSIZE+1; | ||||
| 	ce=count/20+1; | ||||
| 	printf("Doing set_key %ld times\n",ca); | ||||
| #define COND(d)	(count != (d)) | ||||
| #define COUNT(d) (d) | ||||
| #else | ||||
| #define COND(c)	(run) | ||||
| #define COUNT(d) (count) | ||||
|   signal(SIGALRM,sig_done); | ||||
|   printf("Doing set_key for 10 seconds\n"); | ||||
|   alarm(10); | ||||
| 	signal(SIGALRM,sig_done); | ||||
| 	printf("Doing set_key for 10 seconds\n"); | ||||
| 	alarm(10); | ||||
| #endif | ||||
|  | ||||
|   Time_F(START); | ||||
|   for (count=0,run=1; COND(ca); count++) | ||||
|     des_set_key((des_cblock *)key,sch); | ||||
|   d=Time_F(STOP); | ||||
|   printf("%ld set_key's in %.2f seconds\n",count,d); | ||||
|   a=((double)COUNT(ca))/d; | ||||
| 	Time_F(START); | ||||
| 	for (count=0,run=1; COND(ca); count++) | ||||
| 		des_set_key((C_Block *)key,sch); | ||||
| 	d=Time_F(STOP); | ||||
| 	printf("%ld set_key's in %.2f seconds\n",count,d); | ||||
| 	a=((double)COUNT(ca))/d; | ||||
|  | ||||
| #ifdef SIGALRM | ||||
|   printf("Doing des_ecb_encrypt's for 10 seconds\n"); | ||||
|   alarm(10); | ||||
| 	printf("Doing des_ecb_encrypt's for 10 seconds\n"); | ||||
| 	alarm(10); | ||||
| #else | ||||
|   printf("Doing des_ecb_encrypt %ld times\n",cb); | ||||
| 	printf("Doing des_ecb_encrypt %ld times\n",cb); | ||||
| #endif | ||||
|   Time_F(START); | ||||
|   for (count=0,run=1; COND(cb); count++) | ||||
|     des_ecb_encrypt((des_cblock *)buf,(des_cblock *)buf, | ||||
| 		    &(sch[0]),DES_ENCRYPT); | ||||
|   d=Time_F(STOP); | ||||
|   printf("%ld des_ecb_encrypt's in %.2f second\n",count,d); | ||||
|   b=((double)COUNT(cb)*8)/d; | ||||
| 	Time_F(START); | ||||
| 	for (count=0,run=1; COND(cb); count++) | ||||
| 		des_ecb_encrypt((C_Block *)buf,(C_Block *)buf, | ||||
| 			&(sch[0]),DES_ENCRYPT); | ||||
| 	d=Time_F(STOP); | ||||
| 	printf("%ld des_ecb_encrypt's in %.2f second\n",count,d); | ||||
| 	b=((double)COUNT(cb)*8)/d; | ||||
|  | ||||
| #ifdef SIGALRM | ||||
|   printf("Doing des_cbc_encrypt on %ld byte blocks for 10 seconds\n", | ||||
| 	 BUFSIZE); | ||||
|   alarm(10); | ||||
| 	printf("Doing des_cbc_encrypt on %ld byte blocks for 10 seconds\n", | ||||
| 		BUFSIZE); | ||||
| 	alarm(10); | ||||
| #else | ||||
|   printf("Doing des_cbc_encrypt %ld times on %ld byte blocks\n",cc, | ||||
| 	 BUFSIZE); | ||||
| 	printf("Doing des_cbc_encrypt %ld times on %ld byte blocks\n",cc, | ||||
| 		BUFSIZE); | ||||
| #endif | ||||
|   Time_F(START); | ||||
|   for (count=0,run=1; COND(cc); count++) | ||||
|     des_cbc_encrypt((des_cblock *)buf,(des_cblock *)buf,BUFSIZE,&(sch[0]), | ||||
| 		    (des_cblock *)&(key[0]),DES_ENCRYPT); | ||||
|   d=Time_F(STOP); | ||||
|   printf("%ld des_cbc_encrypt's of %ld byte blocks in %.2f second\n", | ||||
| 	 count,BUFSIZE,d); | ||||
|   c=((double)COUNT(cc)*BUFSIZE)/d; | ||||
| 	Time_F(START); | ||||
| 	for (count=0,run=1; COND(cc); count++) | ||||
| 		des_cbc_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", | ||||
| 		count,BUFSIZE,d); | ||||
| 	c=((double)COUNT(cc)*BUFSIZE)/d; | ||||
|  | ||||
| #ifdef SIGALRM | ||||
|   printf("Doing crypt for 10 seconds\n"); | ||||
|   alarm(10); | ||||
| 	printf("Doing des_ede_cbc_encrypt on %ld byte blocks for 10 seconds\n", | ||||
| 		BUFSIZE); | ||||
| 	alarm(10); | ||||
| #else | ||||
|   printf("Doing crypt %ld times\n",cd); | ||||
| 	printf("Doing des_ede_cbc_encrypt %ld times on %ld byte blocks\n",cd, | ||||
| 		BUFSIZE); | ||||
| #endif | ||||
|   Time_F(START); | ||||
|   for (count=0,run=1; COND(cd); count++) | ||||
|     crypt("testing1","ef"); | ||||
|   d=Time_F(STOP); | ||||
|   printf("%ld crypts in %.2f second\n",count,d); | ||||
|   d=((double)COUNT(cd))/d; | ||||
| 	Time_F(START); | ||||
| 	for (count=0,run=1; COND(cd); count++) | ||||
| 		des_ede3_cbc_encrypt((C_Block *)buf,(C_Block *)buf,BUFSIZE, | ||||
| 			&(sch[0]), | ||||
| 			&(sch2[0]), | ||||
| 			&(sch3[0]), | ||||
| 			(C_Block *)&(key[0]), | ||||
| 			DES_ENCRYPT); | ||||
| 	d=Time_F(STOP); | ||||
| 	printf("%ld des_ede_cbc_encrypt's of %ld byte blocks in %.2f second\n", | ||||
| 		count,BUFSIZE,d); | ||||
| 	d=((double)COUNT(cd)*BUFSIZE)/d; | ||||
|  | ||||
|   printf("set_key       per sec = %12.2f (%5.1fuS)\n",a,1.0e6/a); | ||||
|   printf("DES ecb bytes per sec = %12.2f (%5.1fuS)\n",b,8.0e6/b); | ||||
|   printf("DES cbc bytes per sec = %12.2f (%5.1fuS)\n",c,8.0e6/c); | ||||
|   printf("crypt         per sec = %12.2f (%5.1fuS)\n",d,1.0e6/d); | ||||
| } | ||||
| #ifdef SIGALRM | ||||
| 	printf("Doing crypt for 10 seconds\n"); | ||||
| 	alarm(10); | ||||
| #else | ||||
| 	printf("Doing crypt %ld times\n",ce); | ||||
| #endif | ||||
| 	Time_F(START); | ||||
| 	for (count=0,run=1; COND(ce); count++) | ||||
| 		crypt("testing1","ef"); | ||||
| 	e=Time_F(STOP); | ||||
| 	printf("%ld crypts in %.2f second\n",count,e); | ||||
| 	e=((double)COUNT(ce))/e; | ||||
|  | ||||
| 	printf("set_key            per sec = %12.2f (%5.1fuS)\n",a,1.0e6/a); | ||||
| 	printf("DES ecb bytes      per sec = %12.2f (%5.1fuS)\n",b,8.0e6/b); | ||||
| 	printf("DES cbc bytes      per sec = %12.2f (%5.1fuS)\n",c,8.0e6/c); | ||||
| 	printf("DES ede cbc bytes  per sec = %12.2f (%5.1fuS)\n",d,8.0e6/d); | ||||
| 	printf("crypt              per sec = %12.2f (%5.1fuS)\n",e,1.0e6/e); | ||||
| 	exit(0); | ||||
| #ifdef LINT | ||||
| 	return(0); | ||||
| #endif | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										323
									
								
								lib/des/spr.h
									
									
									
									
									
								
							
							
						
						
									
										323
									
								
								lib/des/spr.h
									
									
									
									
									
								
							| @@ -1,146 +1,193 @@ | ||||
| /* spr.h */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| static u_int32_t des_SPtrans[8][64]={ | ||||
| /* lib/des/spr.h */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| static const unsigned long des_SPtrans[8][64]={ | ||||
| { | ||||
| /* nibble 0 */ | ||||
| 0x00820200, 0x00020000, 0x80800000, 0x80820200, | ||||
| 0x00800000, 0x80020200, 0x80020000, 0x80800000, | ||||
| 0x80020200, 0x00820200, 0x00820000, 0x80000200, | ||||
| 0x80800200, 0x00800000, 0x00000000, 0x80020000, | ||||
| 0x00020000, 0x80000000, 0x00800200, 0x00020200, | ||||
| 0x80820200, 0x00820000, 0x80000200, 0x00800200, | ||||
| 0x80000000, 0x00000200, 0x00020200, 0x80820000, | ||||
| 0x00000200, 0x80800200, 0x80820000, 0x00000000, | ||||
| 0x00000000, 0x80820200, 0x00800200, 0x80020000, | ||||
| 0x00820200, 0x00020000, 0x80000200, 0x00800200, | ||||
| 0x80820000, 0x00000200, 0x00020200, 0x80800000, | ||||
| 0x80020200, 0x80000000, 0x80800000, 0x00820000, | ||||
| 0x80820200, 0x00020200, 0x00820000, 0x80800200, | ||||
| 0x00800000, 0x80000200, 0x80020000, 0x00000000, | ||||
| 0x00020000, 0x00800000, 0x80800200, 0x00820200, | ||||
| 0x80000000, 0x80820000, 0x00000200, 0x80020200, | ||||
|  | ||||
| 0x00820200L, 0x00020000L, 0x80800000L, 0x80820200L, | ||||
| 0x00800000L, 0x80020200L, 0x80020000L, 0x80800000L, | ||||
| 0x80020200L, 0x00820200L, 0x00820000L, 0x80000200L, | ||||
| 0x80800200L, 0x00800000L, 0x00000000L, 0x80020000L, | ||||
| 0x00020000L, 0x80000000L, 0x00800200L, 0x00020200L, | ||||
| 0x80820200L, 0x00820000L, 0x80000200L, 0x00800200L, | ||||
| 0x80000000L, 0x00000200L, 0x00020200L, 0x80820000L, | ||||
| 0x00000200L, 0x80800200L, 0x80820000L, 0x00000000L, | ||||
| 0x00000000L, 0x80820200L, 0x00800200L, 0x80020000L, | ||||
| 0x00820200L, 0x00020000L, 0x80000200L, 0x00800200L, | ||||
| 0x80820000L, 0x00000200L, 0x00020200L, 0x80800000L, | ||||
| 0x80020200L, 0x80000000L, 0x80800000L, 0x00820000L, | ||||
| 0x80820200L, 0x00020200L, 0x00820000L, 0x80800200L, | ||||
| 0x00800000L, 0x80000200L, 0x80020000L, 0x00000000L, | ||||
| 0x00020000L, 0x00800000L, 0x80800200L, 0x00820200L, | ||||
| 0x80000000L, 0x80820000L, 0x00000200L, 0x80020200L, | ||||
| },{ | ||||
| /* nibble 1 */ | ||||
| 0x10042004, 0x00000000, 0x00042000, 0x10040000, | ||||
| 0x10000004, 0x00002004, 0x10002000, 0x00042000, | ||||
| 0x00002000, 0x10040004, 0x00000004, 0x10002000, | ||||
| 0x00040004, 0x10042000, 0x10040000, 0x00000004, | ||||
| 0x00040000, 0x10002004, 0x10040004, 0x00002000, | ||||
| 0x00042004, 0x10000000, 0x00000000, 0x00040004, | ||||
| 0x10002004, 0x00042004, 0x10042000, 0x10000004, | ||||
| 0x10000000, 0x00040000, 0x00002004, 0x10042004, | ||||
| 0x00040004, 0x10042000, 0x10002000, 0x00042004, | ||||
| 0x10042004, 0x00040004, 0x10000004, 0x00000000, | ||||
| 0x10000000, 0x00002004, 0x00040000, 0x10040004, | ||||
| 0x00002000, 0x10000000, 0x00042004, 0x10002004, | ||||
| 0x10042000, 0x00002000, 0x00000000, 0x10000004, | ||||
| 0x00000004, 0x10042004, 0x00042000, 0x10040000, | ||||
| 0x10040004, 0x00040000, 0x00002004, 0x10002000, | ||||
| 0x10002004, 0x00000004, 0x10040000, 0x00042000, | ||||
|  | ||||
| 0x10042004L, 0x00000000L, 0x00042000L, 0x10040000L, | ||||
| 0x10000004L, 0x00002004L, 0x10002000L, 0x00042000L, | ||||
| 0x00002000L, 0x10040004L, 0x00000004L, 0x10002000L, | ||||
| 0x00040004L, 0x10042000L, 0x10040000L, 0x00000004L, | ||||
| 0x00040000L, 0x10002004L, 0x10040004L, 0x00002000L, | ||||
| 0x00042004L, 0x10000000L, 0x00000000L, 0x00040004L, | ||||
| 0x10002004L, 0x00042004L, 0x10042000L, 0x10000004L, | ||||
| 0x10000000L, 0x00040000L, 0x00002004L, 0x10042004L, | ||||
| 0x00040004L, 0x10042000L, 0x10002000L, 0x00042004L, | ||||
| 0x10042004L, 0x00040004L, 0x10000004L, 0x00000000L, | ||||
| 0x10000000L, 0x00002004L, 0x00040000L, 0x10040004L, | ||||
| 0x00002000L, 0x10000000L, 0x00042004L, 0x10002004L, | ||||
| 0x10042000L, 0x00002000L, 0x00000000L, 0x10000004L, | ||||
| 0x00000004L, 0x10042004L, 0x00042000L, 0x10040000L, | ||||
| 0x10040004L, 0x00040000L, 0x00002004L, 0x10002000L, | ||||
| 0x10002004L, 0x00000004L, 0x10040000L, 0x00042000L, | ||||
| },{ | ||||
| /* nibble 2 */ | ||||
| 0x41000000, 0x01010040, 0x00000040, 0x41000040, | ||||
| 0x40010000, 0x01000000, 0x41000040, 0x00010040, | ||||
| 0x01000040, 0x00010000, 0x01010000, 0x40000000, | ||||
| 0x41010040, 0x40000040, 0x40000000, 0x41010000, | ||||
| 0x00000000, 0x40010000, 0x01010040, 0x00000040, | ||||
| 0x40000040, 0x41010040, 0x00010000, 0x41000000, | ||||
| 0x41010000, 0x01000040, 0x40010040, 0x01010000, | ||||
| 0x00010040, 0x00000000, 0x01000000, 0x40010040, | ||||
| 0x01010040, 0x00000040, 0x40000000, 0x00010000, | ||||
| 0x40000040, 0x40010000, 0x01010000, 0x41000040, | ||||
| 0x00000000, 0x01010040, 0x00010040, 0x41010000, | ||||
| 0x40010000, 0x01000000, 0x41010040, 0x40000000, | ||||
| 0x40010040, 0x41000000, 0x01000000, 0x41010040, | ||||
| 0x00010000, 0x01000040, 0x41000040, 0x00010040, | ||||
| 0x01000040, 0x00000000, 0x41010000, 0x40000040, | ||||
| 0x41000000, 0x40010040, 0x00000040, 0x01010000, | ||||
|  | ||||
| 0x41000000L, 0x01010040L, 0x00000040L, 0x41000040L, | ||||
| 0x40010000L, 0x01000000L, 0x41000040L, 0x00010040L, | ||||
| 0x01000040L, 0x00010000L, 0x01010000L, 0x40000000L, | ||||
| 0x41010040L, 0x40000040L, 0x40000000L, 0x41010000L, | ||||
| 0x00000000L, 0x40010000L, 0x01010040L, 0x00000040L, | ||||
| 0x40000040L, 0x41010040L, 0x00010000L, 0x41000000L, | ||||
| 0x41010000L, 0x01000040L, 0x40010040L, 0x01010000L, | ||||
| 0x00010040L, 0x00000000L, 0x01000000L, 0x40010040L, | ||||
| 0x01010040L, 0x00000040L, 0x40000000L, 0x00010000L, | ||||
| 0x40000040L, 0x40010000L, 0x01010000L, 0x41000040L, | ||||
| 0x00000000L, 0x01010040L, 0x00010040L, 0x41010000L, | ||||
| 0x40010000L, 0x01000000L, 0x41010040L, 0x40000000L, | ||||
| 0x40010040L, 0x41000000L, 0x01000000L, 0x41010040L, | ||||
| 0x00010000L, 0x01000040L, 0x41000040L, 0x00010040L, | ||||
| 0x01000040L, 0x00000000L, 0x41010000L, 0x40000040L, | ||||
| 0x41000000L, 0x40010040L, 0x00000040L, 0x01010000L, | ||||
| },{ | ||||
| /* nibble 3 */ | ||||
| 0x00100402, 0x04000400, 0x00000002, 0x04100402, | ||||
| 0x00000000, 0x04100000, 0x04000402, 0x00100002, | ||||
| 0x04100400, 0x04000002, 0x04000000, 0x00000402, | ||||
| 0x04000002, 0x00100402, 0x00100000, 0x04000000, | ||||
| 0x04100002, 0x00100400, 0x00000400, 0x00000002, | ||||
| 0x00100400, 0x04000402, 0x04100000, 0x00000400, | ||||
| 0x00000402, 0x00000000, 0x00100002, 0x04100400, | ||||
| 0x04000400, 0x04100002, 0x04100402, 0x00100000, | ||||
| 0x04100002, 0x00000402, 0x00100000, 0x04000002, | ||||
| 0x00100400, 0x04000400, 0x00000002, 0x04100000, | ||||
| 0x04000402, 0x00000000, 0x00000400, 0x00100002, | ||||
| 0x00000000, 0x04100002, 0x04100400, 0x00000400, | ||||
| 0x04000000, 0x04100402, 0x00100402, 0x00100000, | ||||
| 0x04100402, 0x00000002, 0x04000400, 0x00100402, | ||||
| 0x00100002, 0x00100400, 0x04100000, 0x04000402, | ||||
| 0x00000402, 0x04000000, 0x04000002, 0x04100400, | ||||
|  | ||||
| 0x00100402L, 0x04000400L, 0x00000002L, 0x04100402L, | ||||
| 0x00000000L, 0x04100000L, 0x04000402L, 0x00100002L, | ||||
| 0x04100400L, 0x04000002L, 0x04000000L, 0x00000402L, | ||||
| 0x04000002L, 0x00100402L, 0x00100000L, 0x04000000L, | ||||
| 0x04100002L, 0x00100400L, 0x00000400L, 0x00000002L, | ||||
| 0x00100400L, 0x04000402L, 0x04100000L, 0x00000400L, | ||||
| 0x00000402L, 0x00000000L, 0x00100002L, 0x04100400L, | ||||
| 0x04000400L, 0x04100002L, 0x04100402L, 0x00100000L, | ||||
| 0x04100002L, 0x00000402L, 0x00100000L, 0x04000002L, | ||||
| 0x00100400L, 0x04000400L, 0x00000002L, 0x04100000L, | ||||
| 0x04000402L, 0x00000000L, 0x00000400L, 0x00100002L, | ||||
| 0x00000000L, 0x04100002L, 0x04100400L, 0x00000400L, | ||||
| 0x04000000L, 0x04100402L, 0x00100402L, 0x00100000L, | ||||
| 0x04100402L, 0x00000002L, 0x04000400L, 0x00100402L, | ||||
| 0x00100002L, 0x00100400L, 0x04100000L, 0x04000402L, | ||||
| 0x00000402L, 0x04000000L, 0x04000002L, 0x04100400L, | ||||
| },{ | ||||
| /* nibble 4 */ | ||||
| 0x02000000, 0x00004000, 0x00000100, 0x02004108, | ||||
| 0x02004008, 0x02000100, 0x00004108, 0x02004000, | ||||
| 0x00004000, 0x00000008, 0x02000008, 0x00004100, | ||||
| 0x02000108, 0x02004008, 0x02004100, 0x00000000, | ||||
| 0x00004100, 0x02000000, 0x00004008, 0x00000108, | ||||
| 0x02000100, 0x00004108, 0x00000000, 0x02000008, | ||||
| 0x00000008, 0x02000108, 0x02004108, 0x00004008, | ||||
| 0x02004000, 0x00000100, 0x00000108, 0x02004100, | ||||
| 0x02004100, 0x02000108, 0x00004008, 0x02004000, | ||||
| 0x00004000, 0x00000008, 0x02000008, 0x02000100, | ||||
| 0x02000000, 0x00004100, 0x02004108, 0x00000000, | ||||
| 0x00004108, 0x02000000, 0x00000100, 0x00004008, | ||||
| 0x02000108, 0x00000100, 0x00000000, 0x02004108, | ||||
| 0x02004008, 0x02004100, 0x00000108, 0x00004000, | ||||
| 0x00004100, 0x02004008, 0x02000100, 0x00000108, | ||||
| 0x00000008, 0x00004108, 0x02004000, 0x02000008, | ||||
|  | ||||
| 0x02000000L, 0x00004000L, 0x00000100L, 0x02004108L, | ||||
| 0x02004008L, 0x02000100L, 0x00004108L, 0x02004000L, | ||||
| 0x00004000L, 0x00000008L, 0x02000008L, 0x00004100L, | ||||
| 0x02000108L, 0x02004008L, 0x02004100L, 0x00000000L, | ||||
| 0x00004100L, 0x02000000L, 0x00004008L, 0x00000108L, | ||||
| 0x02000100L, 0x00004108L, 0x00000000L, 0x02000008L, | ||||
| 0x00000008L, 0x02000108L, 0x02004108L, 0x00004008L, | ||||
| 0x02004000L, 0x00000100L, 0x00000108L, 0x02004100L, | ||||
| 0x02004100L, 0x02000108L, 0x00004008L, 0x02004000L, | ||||
| 0x00004000L, 0x00000008L, 0x02000008L, 0x02000100L, | ||||
| 0x02000000L, 0x00004100L, 0x02004108L, 0x00000000L, | ||||
| 0x00004108L, 0x02000000L, 0x00000100L, 0x00004008L, | ||||
| 0x02000108L, 0x00000100L, 0x00000000L, 0x02004108L, | ||||
| 0x02004008L, 0x02004100L, 0x00000108L, 0x00004000L, | ||||
| 0x00004100L, 0x02004008L, 0x02000100L, 0x00000108L, | ||||
| 0x00000008L, 0x00004108L, 0x02004000L, 0x02000008L, | ||||
| },{ | ||||
| /* nibble 5 */ | ||||
| 0x20000010, 0x00080010, 0x00000000, 0x20080800, | ||||
| 0x00080010, 0x00000800, 0x20000810, 0x00080000, | ||||
| 0x00000810, 0x20080810, 0x00080800, 0x20000000, | ||||
| 0x20000800, 0x20000010, 0x20080000, 0x00080810, | ||||
| 0x00080000, 0x20000810, 0x20080010, 0x00000000, | ||||
| 0x00000800, 0x00000010, 0x20080800, 0x20080010, | ||||
| 0x20080810, 0x20080000, 0x20000000, 0x00000810, | ||||
| 0x00000010, 0x00080800, 0x00080810, 0x20000800, | ||||
| 0x00000810, 0x20000000, 0x20000800, 0x00080810, | ||||
| 0x20080800, 0x00080010, 0x00000000, 0x20000800, | ||||
| 0x20000000, 0x00000800, 0x20080010, 0x00080000, | ||||
| 0x00080010, 0x20080810, 0x00080800, 0x00000010, | ||||
| 0x20080810, 0x00080800, 0x00080000, 0x20000810, | ||||
| 0x20000010, 0x20080000, 0x00080810, 0x00000000, | ||||
| 0x00000800, 0x20000010, 0x20000810, 0x20080800, | ||||
| 0x20080000, 0x00000810, 0x00000010, 0x20080010, | ||||
|  | ||||
| 0x20000010L, 0x00080010L, 0x00000000L, 0x20080800L, | ||||
| 0x00080010L, 0x00000800L, 0x20000810L, 0x00080000L, | ||||
| 0x00000810L, 0x20080810L, 0x00080800L, 0x20000000L, | ||||
| 0x20000800L, 0x20000010L, 0x20080000L, 0x00080810L, | ||||
| 0x00080000L, 0x20000810L, 0x20080010L, 0x00000000L, | ||||
| 0x00000800L, 0x00000010L, 0x20080800L, 0x20080010L, | ||||
| 0x20080810L, 0x20080000L, 0x20000000L, 0x00000810L, | ||||
| 0x00000010L, 0x00080800L, 0x00080810L, 0x20000800L, | ||||
| 0x00000810L, 0x20000000L, 0x20000800L, 0x00080810L, | ||||
| 0x20080800L, 0x00080010L, 0x00000000L, 0x20000800L, | ||||
| 0x20000000L, 0x00000800L, 0x20080010L, 0x00080000L, | ||||
| 0x00080010L, 0x20080810L, 0x00080800L, 0x00000010L, | ||||
| 0x20080810L, 0x00080800L, 0x00080000L, 0x20000810L, | ||||
| 0x20000010L, 0x20080000L, 0x00080810L, 0x00000000L, | ||||
| 0x00000800L, 0x20000010L, 0x20000810L, 0x20080800L, | ||||
| 0x20080000L, 0x00000810L, 0x00000010L, 0x20080010L, | ||||
| },{ | ||||
| /* nibble 6 */ | ||||
| 0x00001000, 0x00000080, 0x00400080, 0x00400001, | ||||
| 0x00401081, 0x00001001, 0x00001080, 0x00000000, | ||||
| 0x00400000, 0x00400081, 0x00000081, 0x00401000, | ||||
| 0x00000001, 0x00401080, 0x00401000, 0x00000081, | ||||
| 0x00400081, 0x00001000, 0x00001001, 0x00401081, | ||||
| 0x00000000, 0x00400080, 0x00400001, 0x00001080, | ||||
| 0x00401001, 0x00001081, 0x00401080, 0x00000001, | ||||
| 0x00001081, 0x00401001, 0x00000080, 0x00400000, | ||||
| 0x00001081, 0x00401000, 0x00401001, 0x00000081, | ||||
| 0x00001000, 0x00000080, 0x00400000, 0x00401001, | ||||
| 0x00400081, 0x00001081, 0x00001080, 0x00000000, | ||||
| 0x00000080, 0x00400001, 0x00000001, 0x00400080, | ||||
| 0x00000000, 0x00400081, 0x00400080, 0x00001080, | ||||
| 0x00000081, 0x00001000, 0x00401081, 0x00400000, | ||||
| 0x00401080, 0x00000001, 0x00001001, 0x00401081, | ||||
| 0x00400001, 0x00401080, 0x00401000, 0x00001001, | ||||
|  | ||||
| 0x00001000L, 0x00000080L, 0x00400080L, 0x00400001L, | ||||
| 0x00401081L, 0x00001001L, 0x00001080L, 0x00000000L, | ||||
| 0x00400000L, 0x00400081L, 0x00000081L, 0x00401000L, | ||||
| 0x00000001L, 0x00401080L, 0x00401000L, 0x00000081L, | ||||
| 0x00400081L, 0x00001000L, 0x00001001L, 0x00401081L, | ||||
| 0x00000000L, 0x00400080L, 0x00400001L, 0x00001080L, | ||||
| 0x00401001L, 0x00001081L, 0x00401080L, 0x00000001L, | ||||
| 0x00001081L, 0x00401001L, 0x00000080L, 0x00400000L, | ||||
| 0x00001081L, 0x00401000L, 0x00401001L, 0x00000081L, | ||||
| 0x00001000L, 0x00000080L, 0x00400000L, 0x00401001L, | ||||
| 0x00400081L, 0x00001081L, 0x00001080L, 0x00000000L, | ||||
| 0x00000080L, 0x00400001L, 0x00000001L, 0x00400080L, | ||||
| 0x00000000L, 0x00400081L, 0x00400080L, 0x00001080L, | ||||
| 0x00000081L, 0x00001000L, 0x00401081L, 0x00400000L, | ||||
| 0x00401080L, 0x00000001L, 0x00001001L, 0x00401081L, | ||||
| 0x00400001L, 0x00401080L, 0x00401000L, 0x00001001L, | ||||
| },{ | ||||
| /* nibble 7 */ | ||||
| 0x08200020, 0x08208000, 0x00008020, 0x00000000, | ||||
| 0x08008000, 0x00200020, 0x08200000, 0x08208020, | ||||
| 0x00000020, 0x08000000, 0x00208000, 0x00008020, | ||||
| 0x00208020, 0x08008020, 0x08000020, 0x08200000, | ||||
| 0x00008000, 0x00208020, 0x00200020, 0x08008000, | ||||
| 0x08208020, 0x08000020, 0x00000000, 0x00208000, | ||||
| 0x08000000, 0x00200000, 0x08008020, 0x08200020, | ||||
| 0x00200000, 0x00008000, 0x08208000, 0x00000020, | ||||
| 0x00200000, 0x00008000, 0x08000020, 0x08208020, | ||||
| 0x00008020, 0x08000000, 0x00000000, 0x00208000, | ||||
| 0x08200020, 0x08008020, 0x08008000, 0x00200020, | ||||
| 0x08208000, 0x00000020, 0x00200020, 0x08008000, | ||||
| 0x08208020, 0x00200000, 0x08200000, 0x08000020, | ||||
| 0x00208000, 0x00008020, 0x08008020, 0x08200000, | ||||
| 0x00000020, 0x08208000, 0x00208020, 0x00000000, | ||||
| 0x08000000, 0x08200020, 0x00008000, 0x00208020}; | ||||
| 0x08200020L, 0x08208000L, 0x00008020L, 0x00000000L, | ||||
| 0x08008000L, 0x00200020L, 0x08200000L, 0x08208020L, | ||||
| 0x00000020L, 0x08000000L, 0x00208000L, 0x00008020L, | ||||
| 0x00208020L, 0x08008020L, 0x08000020L, 0x08200000L, | ||||
| 0x00008000L, 0x00208020L, 0x00200020L, 0x08008000L, | ||||
| 0x08208020L, 0x08000020L, 0x00000000L, 0x00208000L, | ||||
| 0x08000000L, 0x00200000L, 0x08008020L, 0x08200020L, | ||||
| 0x00200000L, 0x00008000L, 0x08208000L, 0x00000020L, | ||||
| 0x00200000L, 0x00008000L, 0x08000020L, 0x08208020L, | ||||
| 0x00008020L, 0x08000000L, 0x00000000L, 0x00208000L, | ||||
| 0x08200020L, 0x08008020L, 0x08008000L, 0x00200020L, | ||||
| 0x08208000L, 0x00000020L, 0x00200020L, 0x08008000L, | ||||
| 0x08208020L, 0x00200000L, 0x08200000L, 0x08000020L, | ||||
| 0x00208000L, 0x00008020L, 0x08008020L, 0x08200000L, | ||||
| 0x00000020L, 0x08208000L, 0x00208020L, 0x00000000L, | ||||
| 0x08000000L, 0x08200020L, 0x00008000L, 0x00208020L, | ||||
| }}; | ||||
|   | ||||
| @@ -1,112 +1,160 @@ | ||||
| /* str2key.c */ | ||||
| /* Copyright (C) 1993 Eric Young - see README for more details */ | ||||
| /* lib/des/str2key.c */ | ||||
| /* Copyright (C) 1995 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.] | ||||
|  */ | ||||
|  | ||||
| #include "des_locl.h" | ||||
|  | ||||
| extern int des_check_key; | ||||
|  | ||||
| int des_string_to_key(char *str, des_cblock (*key)) | ||||
| { | ||||
|   des_key_schedule ks; | ||||
|   int i,length; | ||||
|   register unsigned char j; | ||||
|  | ||||
|   memset(key,0,8); | ||||
|   length=strlen(str); | ||||
| #ifdef OLD_STR_TO_KEY | ||||
|   for (i=0; i<length; i++) | ||||
|     (*key)[i%8]^=(str[i]<<1); | ||||
| #else  /* MIT COMPATIBLE */ | ||||
|   for (i=0; i<length; i++) | ||||
|     { | ||||
|       j=str[i]; | ||||
|       if ((i%16) < 8) | ||||
| 	(*key)[i%8]^=(j<<1); | ||||
|       else | ||||
| void des_string_to_key(str, key) | ||||
| char *str; | ||||
| des_cblock (*key); | ||||
| 	{ | ||||
| 	  /* Reverse the bit order 05/05/92 eay */ | ||||
| 	  j=((j<<4)&0xf0)|((j>>4)&0x0f); | ||||
| 	  j=((j<<2)&0xcc)|((j>>2)&0x33); | ||||
| 	  j=((j<<1)&0xaa)|((j>>1)&0x55); | ||||
| 	  (*key)[7-(i%8)]^=j; | ||||
| 	} | ||||
|     } | ||||
| 	des_key_schedule ks; | ||||
| 	int i,length; | ||||
| 	register unsigned char j; | ||||
|  | ||||
| 	memset(key,0,8); | ||||
| 	length=strlen(str); | ||||
| #ifdef OLD_STR_TO_KEY | ||||
| 	for (i=0; i<length; i++) | ||||
| 		(*key)[i%8]^=(str[i]<<1); | ||||
| #else /* MIT COMPATIBLE */ | ||||
| 	for (i=0; i<length; i++) | ||||
| 		{ | ||||
| 		j=str[i]; | ||||
| 		if ((i%16) < 8) | ||||
| 			(*key)[i%8]^=(j<<1); | ||||
| 		else | ||||
| 			{ | ||||
| 			/* Reverse the bit order 05/05/92 eay */ | ||||
| 			j=((j<<4)&0xf0)|((j>>4)&0x0f); | ||||
| 			j=((j<<2)&0xcc)|((j>>2)&0x33); | ||||
| 			j=((j<<1)&0xaa)|((j>>1)&0x55); | ||||
| 			(*key)[7-(i%8)]^=j; | ||||
| 			} | ||||
| 		} | ||||
| #endif | ||||
|   des_set_odd_parity((des_cblock *)key); | ||||
|   i=des_check_key; | ||||
|   des_check_key=0; | ||||
|   des_set_key((des_cblock *)key,ks); | ||||
|   des_check_key=i; | ||||
|   des_cbc_cksum((des_cblock *)str,(des_cblock *)key,(long)length,ks, | ||||
| 	des_set_odd_parity((des_cblock *)key); | ||||
| 	i=des_check_key; | ||||
| 	des_check_key=0; | ||||
| 	des_set_key((des_cblock *)key,ks); | ||||
| 	des_check_key=i; | ||||
| 	des_cbc_cksum((des_cblock *)str,(des_cblock *)key,(long)length,ks, | ||||
| 		(des_cblock *)key); | ||||
|   memset(ks,0,sizeof(ks)); | ||||
|   des_set_odd_parity((des_cblock *)key); | ||||
|   return(0); | ||||
| } | ||||
| 	memset(ks,0,sizeof(ks)); | ||||
| 	des_set_odd_parity((des_cblock *)key); | ||||
| 	} | ||||
|  | ||||
| int des_string_to_2keys(char *str, des_cblock (*key1), des_cblock (*key2)) | ||||
| { | ||||
|   des_key_schedule ks; | ||||
|   int i,length; | ||||
|   register unsigned char j; | ||||
| void des_string_to_2keys(str, key1, key2) | ||||
| char *str; | ||||
| des_cblock (*key1); | ||||
| des_cblock (*key2); | ||||
| 	{ | ||||
| 	des_key_schedule ks; | ||||
| 	int i,length; | ||||
| 	register unsigned char j; | ||||
|  | ||||
|   memset(key1,0,8); | ||||
|   memset(key2,0,8); | ||||
|   length=strlen(str); | ||||
| 	memset(key1,0,8); | ||||
| 	memset(key2,0,8); | ||||
| 	length=strlen(str); | ||||
| #ifdef OLD_STR_TO_KEY | ||||
|   if (length <= 8) | ||||
|     { | ||||
|       for (i=0; i<length; i++) | ||||
| 	{ | ||||
| 	  (*key2)[i]=(*key1)[i]=(str[i]<<1); | ||||
| 	} | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       for (i=0; i<length; i++) | ||||
| 	{ | ||||
| 	  if ((i/8)&1) | ||||
| 	    (*key2)[i%8]^=(str[i]<<1); | ||||
| 	  else | ||||
| 	    (*key1)[i%8]^=(str[i]<<1); | ||||
| 	} | ||||
|     } | ||||
| #else  /* MIT COMPATIBLE */ | ||||
|   for (i=0; i<length; i++) | ||||
|     { | ||||
|       j=str[i]; | ||||
|       if ((i%32) < 16) | ||||
| 	{ | ||||
| 	  if ((i%16) < 8) | ||||
| 	    (*key1)[i%8]^=(j<<1); | ||||
| 	  else | ||||
| 	    (*key2)[i%8]^=(j<<1); | ||||
| 	} | ||||
|       else | ||||
| 	{ | ||||
| 	  j=((j<<4)&0xf0)|((j>>4)&0x0f); | ||||
| 	  j=((j<<2)&0xcc)|((j>>2)&0x33); | ||||
| 	  j=((j<<1)&0xaa)|((j>>1)&0x55); | ||||
| 	  if ((i%16) < 8) | ||||
| 	    (*key1)[7-(i%8)]^=j; | ||||
| 	  else | ||||
| 	    (*key2)[7-(i%8)]^=j; | ||||
| 	} | ||||
|     } | ||||
|   if (length <= 8) memcpy(key2,key1,8); | ||||
| 	if (length <= 8) | ||||
| 		{ | ||||
| 		for (i=0; i<length; i++) | ||||
| 			{ | ||||
| 			(*key2)[i]=(*key1)[i]=(str[i]<<1); | ||||
| 			} | ||||
| 		} | ||||
| 	else | ||||
| 		{ | ||||
| 		for (i=0; i<length; i++) | ||||
| 			{ | ||||
| 			if ((i/8)&1) | ||||
| 				(*key2)[i%8]^=(str[i]<<1); | ||||
| 			else | ||||
| 				(*key1)[i%8]^=(str[i]<<1); | ||||
| 			} | ||||
| 		} | ||||
| #else /* MIT COMPATIBLE */ | ||||
| 	for (i=0; i<length; i++) | ||||
| 		{ | ||||
| 		j=str[i]; | ||||
| 		if ((i%32) < 16) | ||||
| 			{ | ||||
| 			if ((i%16) < 8) | ||||
| 				(*key1)[i%8]^=(j<<1); | ||||
| 			else | ||||
| 				(*key2)[i%8]^=(j<<1); | ||||
| 			} | ||||
| 		else | ||||
| 			{ | ||||
| 			j=((j<<4)&0xf0)|((j>>4)&0x0f); | ||||
| 			j=((j<<2)&0xcc)|((j>>2)&0x33); | ||||
| 			j=((j<<1)&0xaa)|((j>>1)&0x55); | ||||
| 			if ((i%16) < 8) | ||||
| 				(*key1)[7-(i%8)]^=j; | ||||
| 			else | ||||
| 				(*key2)[7-(i%8)]^=j; | ||||
| 			} | ||||
| 		} | ||||
| 	if (length <= 8) memcpy(key2,key1,8); | ||||
| #endif | ||||
|   des_set_odd_parity((des_cblock *)key1); | ||||
|   des_set_odd_parity((des_cblock *)key2); | ||||
|   i=des_check_key; | ||||
|   des_check_key=0; | ||||
|   des_set_key((des_cblock *)key1,ks); | ||||
|   des_cbc_cksum((des_cblock *)str,(des_cblock *)key1,(long)length,ks, | ||||
| 	des_set_odd_parity((des_cblock *)key1); | ||||
| 	des_set_odd_parity((des_cblock *)key2); | ||||
| 	i=des_check_key; | ||||
| 	des_check_key=0; | ||||
| 	des_set_key((des_cblock *)key1,ks); | ||||
| 	des_cbc_cksum((des_cblock *)str,(des_cblock *)key1,(long)length,ks, | ||||
| 		(des_cblock *)key1); | ||||
|   des_set_key((des_cblock *)key2,ks); | ||||
|   des_cbc_cksum((des_cblock *)str,(des_cblock *)key2,(long)length,ks, | ||||
| 	des_set_key((des_cblock *)key2,ks); | ||||
| 	des_cbc_cksum((des_cblock *)str,(des_cblock *)key2,(long)length,ks, | ||||
| 		(des_cblock *)key2); | ||||
|   des_check_key=i; | ||||
|   memset(ks,0,sizeof(ks)); | ||||
|   des_set_odd_parity(key1); | ||||
|   des_set_odd_parity(key2); | ||||
|   return(0); | ||||
| } | ||||
| 	des_check_key=i; | ||||
| 	memset(ks,0,sizeof(ks)); | ||||
| 	des_set_odd_parity(key1); | ||||
| 	des_set_odd_parity(key2); | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										51
									
								
								lib/des/supp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								lib/des/supp.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| /* | ||||
|  * Copyright (c) 1995 | ||||
|  *	Mark Murray.  All rights reserved. | ||||
|  * | ||||
|  * 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 above 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 Mark Murray | ||||
|  * 4. Neither the name of the author nor the names of any co-contributors | ||||
|  *    may be used to endorse or promote products derived from this software | ||||
|  *    without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY MARK MURRAY AND CONTRIBUTORS ``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 REGENTS 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. | ||||
|  * | ||||
|  * $Id$ | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include "des_locl.h" | ||||
|  | ||||
| void des_cblock_print_file(cb, fp) | ||||
| 	des_cblock *cb; | ||||
| 	FILE *fp; | ||||
| { | ||||
| 	int i; | ||||
| 	unsigned int *p = (unsigned int *)cb; | ||||
|  | ||||
| 	fprintf(fp, " 0x { "); | ||||
| 	for (i = 0; i < 8; i++) { | ||||
| 		fprintf(fp, "%x", p[i]); | ||||
| 		if (i != 7) fprintf(fp, ", "); | ||||
| 	} | ||||
| 	fprintf(fp, " }"); | ||||
| } | ||||
							
								
								
									
										0
									
								
								lib/des/t/perl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								lib/des/t/perl
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										27
									
								
								lib/des/t/test
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								lib/des/t/test
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| #!./perl | ||||
|  | ||||
| BEGIN { push(@INC, qw(../../../lib ../../lib ../lib lib)); } | ||||
|  | ||||
| use DES; | ||||
|  | ||||
| $key='00000000'; | ||||
| $ks=DES::set_key($key); | ||||
| @a=split(//,$ks); | ||||
| foreach (@a) { printf "%02x-",ord($_); } | ||||
| print "\n"; | ||||
|  | ||||
|  | ||||
| $key=DES::random_key(); | ||||
| print "($_)\n"; | ||||
| @a=split(//,$key); | ||||
| foreach (@a) { printf "%02x-",ord($_); } | ||||
| print "\n"; | ||||
| $str="this is and again into the breach"; | ||||
| ($k1,$k2)=DES::string_to_2keys($str); | ||||
| @a=split(//,$k1); | ||||
| foreach (@a) { printf "%02x-",ord($_); } | ||||
| print "\n"; | ||||
| @a=split(//,$k2); | ||||
| foreach (@a) { printf "%02x-",ord($_); } | ||||
| print "\n"; | ||||
|  | ||||
| @@ -1,4 +1,76 @@ | ||||
| DEC Alpha DEC 4000/610 AXP OSF/1 v 1.3 - gcc v 2.3.3 | ||||
| SGI Challenge (MIPS R4400 200mhz) - gcc -O2 | ||||
| set_key       per sec =    114141.13 (  8.8uS) | ||||
| DES ecb bytes per sec =   1573472.84 (  5.1uS) | ||||
| DES cbc bytes per sec =   1580418.20 (  5.1uS) | ||||
| crypt         per sec =      7137.84 (140.1uS) | ||||
|  | ||||
| DEC Alpha DEC  4000/710 AXP OSF/1 v 3.0 - gcc -O2 2.6.1 | ||||
| set_key       per sec =    123138.49 (  8.1uS) | ||||
| DES ecb bytes per sec =   1407546.76 (  5.7uS) | ||||
| DES cbc bytes per sec =   1404103.21 (  5.7uS) | ||||
| crypt         per sec =      7746.76 (129.1uS) | ||||
|  | ||||
| DEC Alpha DEC  4000/710 AXP OSF/1 v 3.0 - cc -O4 'DEC Compiler Driver 3.11' | ||||
| set_key       per sec =    135160.83 (  7.4uS) | ||||
| DES ecb bytes per sec =   1267753.22 (  6.3uS) | ||||
| DES cbc bytes per sec =   1260564.90 (  6.3uS) | ||||
| crypt         per sec =      6479.37 (154.3uS) | ||||
|  | ||||
| SGI Challenge (MIPS R4400 200mhz) - cc -O2 | ||||
| set_key       per sec =    124000.10 (  8.1uS) | ||||
| 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) | ||||
|  | ||||
| SGI Indy (MIPS R4600 133mhz) -cc -O2 | ||||
| set_key       per sec =     88470.54 ( 11.3uS) | ||||
| DES ecb bytes per sec =   1023040.33 (  7.8uS) | ||||
| DES cbc bytes per sec =   1033610.01 (  7.7uS) | ||||
| crypt         per sec =      4641.51 (215.4uS) | ||||
|  | ||||
| HP-UX 9000/887 cc +O3 | ||||
| set_key       per sec =     76824.30 ( 13.0uS) | ||||
| DES ecb bytes per sec =   1048911.20 (  7.6uS) | ||||
| DES cbc bytes per sec =   1072332.80 (  7.5uS) | ||||
| crypt         per sec =      4968.64 (201.3uS) | ||||
|  | ||||
| IRIX 5.2 IP22 (R4000) cc -O2 (galilo) | ||||
| set_key       per sec =     60615.73 ( 16.5uS) | ||||
| DES ecb bytes per sec =    584741.32 ( 13.7uS) | ||||
| DES cbc bytes per sec =    584306.94 ( 13.7uS) | ||||
| crypt         per sec =      3049.33 (327.9uS) | ||||
|  | ||||
| HP-UX 9000/867 cc -O | ||||
| set_key       per sec =     48600.00 ( 20.6uS) | ||||
| DES ecb bytes per sec =    616235.14 ( 13.0uS) | ||||
| DES cbc bytes per sec =    638669.44 ( 12.5uS) | ||||
| crypt         per sec =      3016.68 (331.5uS) | ||||
|  | ||||
| HP-UX 9000/867 gcc -O2 | ||||
| set_key       per sec =     52120.50 ( 19.2uS) | ||||
| DES ecb bytes per sec =    715156.55 ( 11.2uS) | ||||
| DES cbc bytes per sec =    724424.28 ( 11.0uS) | ||||
| crypt         per sec =      3295.87 (303.4uS) | ||||
|  | ||||
| DGUX AViiON mc88110 gcc -O2 | ||||
| set_key       per sec =     55604.91 ( 18.0uS) | ||||
| DES ecb bytes per sec =    658513.25 ( 12.1uS) | ||||
| DES cbc bytes per sec =    675552.71 ( 11.8uS) | ||||
| crypt         per sec =      3438.10 (290.9uS) | ||||
|  | ||||
| Sparc 10 cc -O2 (orb) | ||||
| set_key       per sec =     53002.30 ( 18.9uS) | ||||
| DES ecb bytes per sec =    705250.40 ( 11.3uS) | ||||
| DES cbc bytes per sec =    714342.40 ( 11.2uS) | ||||
| crypt         per sec =      2943.99 (339.7uS) | ||||
|  | ||||
| Sparc 10 gcc -O2 (orb) | ||||
| set_key       per sec =     58681.21 ( 17.0uS) | ||||
| DES ecb bytes per sec =    772390.20 ( 10.4uS) | ||||
| DES cbc bytes per sec =    774144.00 ( 10.3uS) | ||||
| crypt         per sec =      3606.90 (277.2uS) | ||||
|  | ||||
| DEC Alpha DEC  4000/610 AXP OSF/1 v 1.3 - gcc v 2.3.3 | ||||
| set_key       per sec =    101840.19 (  9.8uS) | ||||
| DES ecb bytes per sec =   1223712.35 (  6.5uS) | ||||
| DES cbc bytes per sec =   1230542.98 (  6.5uS) | ||||
| @@ -28,6 +100,12 @@ DES ecb bytes per sec =    505971.82 | ||||
| DES cbc bytes per sec =    515381.13 | ||||
| crypt         per sec =      2438.24 | ||||
|  | ||||
| iris (spike) cc -O2 | ||||
| set_key       per sec =     23128.83 ( 43.2uS) | ||||
| DES ecb bytes per sec =    261577.94 ( 30.6uS) | ||||
| DES cbc bytes per sec =    261746.41 ( 30.6uS) | ||||
| crypt         per sec =      1231.76 (811.8uS) | ||||
|  | ||||
| sun sparc 10/30 - cc -O4 | ||||
| set_key       per sec =     38379.86 ( 26.1uS) | ||||
| DES ecb bytes per sec =    460051.34 ( 17.4uS) | ||||
| @@ -46,6 +124,24 @@ DES ecb bytes per sec =    222231.26 | ||||
| DES cbc bytes per sec =    223926.79 | ||||
| crypt         per sec =       981.20 | ||||
|  | ||||
| 80486dx/66MHz Solaris 2.1 - gcc -O2 (gcc 2.6.3) | ||||
| set_key       per sec =     26814.15 ( 37.3uS) | ||||
| DES ecb bytes per sec =    345029.95 ( 23.2uS) | ||||
| DES cbc bytes per sec =    344064.00 ( 23.3uS) | ||||
| crypt         per sec =      1551.97 (644.3uS) | ||||
|  | ||||
| 80486dx/50MHz Solaris 2.1 - gcc -O2 (gcc 2.5.2) | ||||
| set_key       per sec =     18558.29 ( 53.9uS) | ||||
| DES ecb bytes per sec =    240873.90 ( 33.2uS) | ||||
| DES cbc bytes per sec =    239993.37 ( 33.3uS) | ||||
| crypt         per sec =      1073.67 (931.4uS) | ||||
|  | ||||
| 80486dx/50MHz Solaris 2.1 - cc -xO4 (cc: PC2.0.1 30 April 1993) | ||||
| set_key       per sec =     18302.79 ( 54.6uS) | ||||
| DES ecb bytes per sec =    242640.29 ( 33.0uS) | ||||
| DES cbc bytes per sec =    239568.89 ( 33.4uS) | ||||
| crypt         per sec =      1057.92 (945.2uS) | ||||
|  | ||||
| 68030 HP400 | ||||
| set_key       per sec =      5251.28 | ||||
| DES ecb bytes per sec =     56186.56 | ||||
|   | ||||
							
								
								
									
										34
									
								
								lib/des/typemap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lib/des/typemap
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| # | ||||
| # DES SECTION | ||||
| # | ||||
| deschar *	T_DESCHARP | ||||
| des_cblock *	T_CBLOCK | ||||
| des_cblock	T_CBLOCK | ||||
| des_key_schedule	T_SCHEDULE | ||||
| des_key_schedule *	T_SCHEDULE | ||||
|  | ||||
| INPUT | ||||
| T_CBLOCK | ||||
| 	$var=(des_cblock *)SvPV($arg,len); | ||||
| 	if (len < DES_KEY_SZ) | ||||
| 		{ | ||||
| 		croak(\"$var needs to be at least %u bytes long\",DES_KEY_SZ); | ||||
| 		} | ||||
|  | ||||
| T_SCHEDULE | ||||
| 	$var=(des_key_schedule *)SvPV($arg,len); | ||||
| 	if (len < DES_SCHEDULE_SZ) | ||||
| 		{ | ||||
| 		croak(\"$var needs to be at least %u bytes long\", | ||||
| 			DES_SCHEDULE_SZ); | ||||
| 		} | ||||
|  | ||||
| OUTPUT | ||||
| T_CBLOCK | ||||
| 	sv_setpvn($arg,(char *)$var,DES_KEY_SZ); | ||||
|  | ||||
| T_SCHEDULE | ||||
| 	sv_setpvn($arg,(char *)$var,DES_SCHEDULE_SZ); | ||||
|  | ||||
| T_DESCHARP | ||||
| 	sv_setpvn($arg,(char *)$var,len); | ||||
							
								
								
									
										48
									
								
								lib/des/version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								lib/des/version.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| /* lib/des/version.h */ | ||||
| /* Copyright (C) 1995 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; | ||||
		Reference in New Issue
	
	Block a user
	 Assar Westerlund
					Assar Westerlund