#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#ifndef MSDOS
+#ifndef VMS
+#include <openssl/opensslconf.h>
+#include OPENSSL_UNISTD
+#else /* VMS */
+#ifdef __DECC
#include <unistd.h>
-#else
+#else /* not __DECC */
+#include <math.h>
+#endif /* __DECC */
+#endif /* VMS */
+#else /* MSDOS */
#include <io.h>
-#define RAND
#endif
#include <time.h>
#endif
#include <sys/stat.h>
#endif
-#if defined(NOCONST)
-#define const
-#endif
-#include "des.h"
-
-#if defined(__STDC__) || defined(VMS) || defined(M_XENIX) || defined(MSDOS)
-#include <string.h>
-#endif
+#include <openssl/des.h>
+#include <openssl/rand.h>
-#ifdef RAND
-#define random rand
-#define srandom(s) srand(s)
-#endif
-
-#ifndef NOPROTO
void usage(void);
void doencryption(void);
int uufwrite(unsigned char *data, int size, unsigned int num, FILE *fp);
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);
-#else
-void usage();
-void doencryption();
-int uufwrite();
-void uufwriteEnd();
-int uufread();
-int uuencode();
-int uudecode();
-void des_3cbc_encrypt();
-#endif
-
#ifdef VMS
#define EXIT(a) exit(a&0x10000000L)
#else
int vflag,cflag,eflag,dflag,kflag,bflag,fflag,sflag,uflag,flag3,hflag,error;
-int main(argc, argv)
-int argc;
-char **argv;
+int main(int argc, char **argv)
{
int i;
struct stat ins,outs;
EXIT(0);
}
-void usage()
+void usage(void)
{
char **u;
static const char *Usage[]={
"des <options> [input-file [output-file]]",
"options:",
"-v : des(1) version number",
-"-e : encrypt using sunOS compatible user key to DES key conversion.",
+"-e : encrypt using SunOS compatible user key to DES key conversion.",
"-E : encrypt ",
-"-d : decrypt using sunOS compatible user key to DES key conversion.",
+"-d : decrypt using SunOS compatible user key to DES key conversion.",
"-D : decrypt ",
-"-c[ckname] : generate a cbc_cksum using sunOS compatible user key to",
+"-c[ckname] : generate a cbc_cksum using SunOS compatible user key to",
" DES key conversion and output to ckname (stdout default,",
" stderr if data being output on stdout). The checksum is",
" generated before encryption and after decryption if used",
" in conjunction with -[eEdD].",
"-C[ckname] : generate a cbc_cksum as for -c but compatible with -[ED].",
"-k key : use key 'key'",
-"-h : the key that is entered will be a hexidecimal number",
+"-h : the key that is entered will be a hexadecimal number",
" that is used directly as the des key",
"-u[uuname] : input file is uudecoded if -[dD] or output uuencoded data if -[eE]",
" (uuname is the filename to put in the uuencode header).",
-"-b : encrypt using DES in ecb encryption mode, the defaut is cbc mode.",
-"-3 : encrypt using tripple DES encryption. This uses 2 keys",
+"-b : encrypt using DES in ecb encryption mode, the default is cbc mode.",
+"-3 : encrypt using triple DES encryption. This uses 2 keys",
" generated from the input key. If the input key is less",
-" than 8 characters long, this is equivelent to normal",
-" encryption. Default is tripple cbc, -b makes it tripple ecb.",
+" than 8 characters long, this is equivalent to normal",
+" encryption. Default is triple cbc, -b makes it triple ecb.",
NULL
};
for (u=(char **)Usage; *u; u++)
EXIT(1);
}
-void doencryption()
+void doencryption(void)
{
#ifdef _LIBC
- extern int srandom();
- extern int random();
extern unsigned long time();
#endif
register int i;
des_key_schedule ks,ks2;
- unsigned char iv[8],iv2[8];
+ des_cblock iv,iv2;
char *p;
int num=0,j,k,l,rem,ll,len,last,ex=0;
des_cblock kk,k2;
if (buf == NULL)
{
- if ( (( buf=(unsigned char *)Malloc(BUFSIZE+8)) == NULL) ||
- ((obuf=(unsigned char *)Malloc(BUFSIZE+8)) == NULL))
+ if ( (( buf=OPENSSL_malloc(BUFSIZE+8)) == NULL) ||
+ ((obuf=OPENSSL_malloc(BUFSIZE+8)) == NULL))
{
fputs("Not enough memory\n",stderr);
Exit=10;
else
k2[i-8]=k;
}
- des_set_key((C_Block *)k2,ks2);
+ des_set_key_unchecked(&k2,ks2);
memset(k2,0,sizeof(k2));
}
else if (longk || flag3)
{
if (flag3)
{
- des_string_to_2keys(key,(C_Block *)kk,(C_Block *)k2);
- des_set_key((C_Block *)k2,ks2);
+ des_string_to_2keys(key,&kk,&k2);
+ des_set_key_unchecked(&k2,ks2);
memset(k2,0,sizeof(k2));
}
else
- des_string_to_key(key,(C_Block *)kk);
+ des_string_to_key(key,&kk);
}
else
for (i=0; i<KEYSIZ; i++)
kk[i]=key[i]|0x80;
}
- des_set_key((C_Block *)kk,ks);
+ des_set_key_unchecked(&kk,ks);
memset(key,0,sizeof(key));
memset(kk,0,sizeof(kk));
/* woops - A bug that does not showup under unix :-( */
len=l-rem;
if (feof(DES_IN))
{
- srandom((unsigned int)time(NULL));
for (i=7-rem; i>0; i--)
- buf[l++]=random()&0xff;
+ RAND_pseudo_bytes(buf + l++, 1);
buf[l++]=rem;
ex=1;
len+=rem;
if (cflag)
{
- des_cbc_cksum((C_Block *)buf,(C_Block *)cksum,
- (long)len,ks,(C_Block *)cksum);
+ des_cbc_cksum(buf,&cksum,
+ (long)len,ks,&cksum);
if (!eflag)
{
if (feof(DES_IN)) break;
(unsigned int)rem);
des_3cbc_encrypt(
(des_cblock *)buf,(des_cblock *)obuf,
- (long)l,ks,ks2,(des_cblock *)iv,
- (des_cblock *)iv2,do_encrypt);
+ (long)l,ks,ks2,&iv,
+ &iv2,do_encrypt);
if (rem) memcpy(&(buf[l]),tmpbuf,
(unsigned int)rem);
}
else
{
des_cbc_encrypt(
- (des_cblock *)buf,(des_cblock *)obuf,
- (long)l,ks,(des_cblock *)iv,do_encrypt);
+ buf,obuf,
+ (long)l,ks,&iv,do_encrypt);
if (l >= 8) memcpy(iv,&(obuf[l-8]),8);
}
if (rem) memcpy(buf,&(buf[l]),(unsigned int)rem);
{
des_3cbc_encrypt(
(des_cblock *)buf,(des_cblock *)obuf,
- (long)l,ks,ks2,(des_cblock *)iv,
- (des_cblock *)iv2,do_encrypt);
+ (long)l,ks,ks2,&iv,
+ &iv2,do_encrypt);
}
else
{
des_cbc_encrypt(
- (des_cblock *)buf,(des_cblock *)obuf,
- (long)l,ks,(des_cblock *)iv,do_encrypt);
+ buf,obuf,
+ (long)l,ks,&iv,do_encrypt);
if (l >= 8) memcpy(iv,&(buf[l-8]),8);
}
l=l-8+last;
}
i=0;
- if (cflag) des_cbc_cksum((C_Block *)obuf,
- (C_Block *)cksum,(long)l/8*8,ks,
- (C_Block *)cksum);
+ if (cflag) des_cbc_cksum(obuf,
+ (des_cblock *)cksum,(long)l/8*8,ks,
+ (des_cblock *)cksum);
while (i != l)
{
j=fwrite(obuf,1,(unsigned int)l-i,DES_OUT);
if (Exit) EXIT(Exit);
}
-int uufwrite(data, size, num, fp)
-unsigned char *data;
-int size;
-unsigned int num;
-FILE *fp;
-
- /* We ignore this parameter but it should be > ~50 I believe */
-
-
+/* We ignore this parameter but it should be > ~50 I believe */
+int uufwrite(unsigned char *data, int size, unsigned int num, FILE *fp)
{
int i,j,left,rem,ret=num;
static int start=1;
return(ret);
}
-void uufwriteEnd(fp)
-FILE *fp;
+void uufwriteEnd(FILE *fp)
{
int j;
static const char *end=" \nend\n";
fwrite(end,1,strlen(end),fp);
}
-int uufread(out, size, num, fp)
-unsigned char *out;
-int size; /* should always be > ~ 60; I actually ignore this parameter :-) */
-unsigned int num;
-FILE *fp;
+/* int size: should always be > ~ 60; I actually ignore this parameter :-) */
+int uufread(unsigned char *out, int size, unsigned int num, FILE *fp)
{
int i,j,tot;
static int done=0;
*((c)++)=(unsigned char)(((l) )&0xff))
-int uuencode(in, num, out)
-unsigned char *in;
-int num;
-unsigned char *out;
+int uuencode(unsigned char *in, int num, unsigned char *out)
{
int j,i,n,tot=0;
DES_LONG l;
return(tot);
}
-int uudecode(in, num, out)
-unsigned char *in;
-int num;
-unsigned char *out;
+int uudecode(unsigned char *in, int num, unsigned char *out)
{
int j,i,k;
unsigned int n=0,space=0;