summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des/des.c
diff options
context:
space:
mode:
authorbeck <>1999-09-29 04:37:45 +0000
committerbeck <>1999-09-29 04:37:45 +0000
commitde8f24ea083384bb66b32ec105dc4743c5663cdf (patch)
tree1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libcrypto/des/des.c
parentcb929d29896bcb87c2a97417fbd03e50078fc178 (diff)
downloadopenbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.gz
openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.bz2
openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.zip
OpenSSL 0.9.4 merge
Diffstat (limited to 'src/lib/libcrypto/des/des.c')
-rw-r--r--src/lib/libcrypto/des/des.c121
1 files changed, 44 insertions, 77 deletions
diff --git a/src/lib/libcrypto/des/des.c b/src/lib/libcrypto/des/des.c
index c1e5005474..b2d7f0da78 100644
--- a/src/lib/libcrypto/des/des.c
+++ b/src/lib/libcrypto/des/des.c
@@ -59,10 +59,18 @@
59#include <stdio.h> 59#include <stdio.h>
60#include <stdlib.h> 60#include <stdlib.h>
61#ifndef MSDOS 61#ifndef MSDOS
62#ifndef VMS
63#include <openssl/opensslconf.h>
64#include OPENSSL_UNISTD
65#else /* VMS */
66#ifdef __DECC
62#include <unistd.h> 67#include <unistd.h>
68#else /* not __DECC */
69#include <math.h>
70#endif /* __DECC */
71#endif /* VMS */
63#else 72#else
64#include <io.h> 73#include <io.h>
65#define RAND
66#endif 74#endif
67 75
68#include <time.h> 76#include <time.h>
@@ -77,21 +85,13 @@
77#endif 85#endif
78#include <sys/stat.h> 86#include <sys/stat.h>
79#endif 87#endif
80#if defined(NOCONST) 88#include <openssl/des.h>
81#define const 89#include <openssl/rand.h>
82#endif
83#include "des.h"
84 90
85#if defined(__STDC__) || defined(VMS) || defined(M_XENIX) || defined(MSDOS) 91#if defined(__STDC__) || defined(VMS) || defined(M_XENIX) || defined(MSDOS)
86#include <string.h> 92#include <string.h>
87#endif 93#endif
88 94
89#ifdef RAND
90#define random rand
91#define srandom(s) srand(s)
92#endif
93
94#ifndef NOPROTO
95void usage(void); 95void usage(void);
96void doencryption(void); 96void doencryption(void);
97int uufwrite(unsigned char *data, int size, unsigned int num, FILE *fp); 97int uufwrite(unsigned char *data, int size, unsigned int num, FILE *fp);
@@ -102,17 +102,6 @@ int uudecode(unsigned char *in,int num,unsigned char *out);
102void des_3cbc_encrypt(des_cblock *input,des_cblock *output,long length, 102void des_3cbc_encrypt(des_cblock *input,des_cblock *output,long length,
103 des_key_schedule sk1,des_key_schedule sk2, 103 des_key_schedule sk1,des_key_schedule sk2,
104 des_cblock *ivec1,des_cblock *ivec2,int enc); 104 des_cblock *ivec1,des_cblock *ivec2,int enc);
105#else
106void usage();
107void doencryption();
108int uufwrite();
109void uufwriteEnd();
110int uufread();
111int uuencode();
112int uudecode();
113void des_3cbc_encrypt();
114#endif
115
116#ifdef VMS 105#ifdef VMS
117#define EXIT(a) exit(a&0x10000000L) 106#define EXIT(a) exit(a&0x10000000L)
118#else 107#else
@@ -138,9 +127,7 @@ char cksumname[200]="";
138 127
139int vflag,cflag,eflag,dflag,kflag,bflag,fflag,sflag,uflag,flag3,hflag,error; 128int vflag,cflag,eflag,dflag,kflag,bflag,fflag,sflag,uflag,flag3,hflag,error;
140 129
141int main(argc, argv) 130int main(int argc, char **argv)
142int argc;
143char **argv;
144 { 131 {
145 int i; 132 int i;
146 struct stat ins,outs; 133 struct stat ins,outs;
@@ -331,7 +318,7 @@ char **argv;
331 EXIT(0); 318 EXIT(0);
332 } 319 }
333 320
334void usage() 321void usage(void)
335 { 322 {
336 char **u; 323 char **u;
337 static const char *Usage[]={ 324 static const char *Usage[]={
@@ -357,7 +344,7 @@ void usage()
357"-3 : encrypt using tripple DES encryption. This uses 2 keys", 344"-3 : encrypt using tripple DES encryption. This uses 2 keys",
358" generated from the input key. If the input key is less", 345" generated from the input key. If the input key is less",
359" than 8 characters long, this is equivelent to normal", 346" than 8 characters long, this is equivelent to normal",
360" encryption. Default is tripple cbc, -b makes it tripple ecb.", 347" encryption. Default is triple cbc, -b makes it triple ecb.",
361NULL 348NULL
362}; 349};
363 for (u=(char **)Usage; *u; u++) 350 for (u=(char **)Usage; *u; u++)
@@ -369,17 +356,15 @@ NULL
369 EXIT(1); 356 EXIT(1);
370 } 357 }
371 358
372void doencryption() 359void doencryption(void)
373 { 360 {
374#ifdef _LIBC 361#ifdef _LIBC
375 extern int srandom();
376 extern int random();
377 extern unsigned long time(); 362 extern unsigned long time();
378#endif 363#endif
379 364
380 register int i; 365 register int i;
381 des_key_schedule ks,ks2; 366 des_key_schedule ks,ks2;
382 unsigned char iv[8],iv2[8]; 367 des_cblock iv,iv2;
383 char *p; 368 char *p;
384 int num=0,j,k,l,rem,ll,len,last,ex=0; 369 int num=0,j,k,l,rem,ll,len,last,ex=0;
385 des_cblock kk,k2; 370 des_cblock kk,k2;
@@ -392,8 +377,8 @@ void doencryption()
392 377
393 if (buf == NULL) 378 if (buf == NULL)
394 { 379 {
395 if ( (( buf=(unsigned char *)Malloc(BUFSIZE+8)) == NULL) || 380 if ( (( buf=Malloc(BUFSIZE+8)) == NULL) ||
396 ((obuf=(unsigned char *)Malloc(BUFSIZE+8)) == NULL)) 381 ((obuf=Malloc(BUFSIZE+8)) == NULL))
397 { 382 {
398 fputs("Not enough memory\n",stderr); 383 fputs("Not enough memory\n",stderr);
399 Exit=10; 384 Exit=10;
@@ -440,19 +425,19 @@ void doencryption()
440 else 425 else
441 k2[i-8]=k; 426 k2[i-8]=k;
442 } 427 }
443 des_set_key((C_Block *)k2,ks2); 428 des_set_key(&k2,ks2);
444 memset(k2,0,sizeof(k2)); 429 memset(k2,0,sizeof(k2));
445 } 430 }
446 else if (longk || flag3) 431 else if (longk || flag3)
447 { 432 {
448 if (flag3) 433 if (flag3)
449 { 434 {
450 des_string_to_2keys(key,(C_Block *)kk,(C_Block *)k2); 435 des_string_to_2keys(key,&kk,&k2);
451 des_set_key((C_Block *)k2,ks2); 436 des_set_key(&k2,ks2);
452 memset(k2,0,sizeof(k2)); 437 memset(k2,0,sizeof(k2));
453 } 438 }
454 else 439 else
455 des_string_to_key(key,(C_Block *)kk); 440 des_string_to_key(key,&kk);
456 } 441 }
457 else 442 else
458 for (i=0; i<KEYSIZ; i++) 443 for (i=0; i<KEYSIZ; i++)
@@ -470,7 +455,7 @@ void doencryption()
470 kk[i]=key[i]|0x80; 455 kk[i]=key[i]|0x80;
471 } 456 }
472 457
473 des_set_key((C_Block *)kk,ks); 458 des_set_key(&kk,ks);
474 memset(key,0,sizeof(key)); 459 memset(key,0,sizeof(key));
475 memset(kk,0,sizeof(kk)); 460 memset(kk,0,sizeof(kk));
476 /* woops - A bug that does not showup under unix :-( */ 461 /* woops - A bug that does not showup under unix :-( */
@@ -498,9 +483,8 @@ void doencryption()
498 len=l-rem; 483 len=l-rem;
499 if (feof(DES_IN)) 484 if (feof(DES_IN))
500 { 485 {
501 srandom((unsigned int)time(NULL));
502 for (i=7-rem; i>0; i--) 486 for (i=7-rem; i>0; i--)
503 buf[l++]=random()&0xff; 487 RAND_bytes(buf + l++, 1);
504 buf[l++]=rem; 488 buf[l++]=rem;
505 ex=1; 489 ex=1;
506 len+=rem; 490 len+=rem;
@@ -510,8 +494,8 @@ void doencryption()
510 494
511 if (cflag) 495 if (cflag)
512 { 496 {
513 des_cbc_cksum((C_Block *)buf,(C_Block *)cksum, 497 des_cbc_cksum(buf,&cksum,
514 (long)len,ks,(C_Block *)cksum); 498 (long)len,ks,&cksum);
515 if (!eflag) 499 if (!eflag)
516 { 500 {
517 if (feof(DES_IN)) break; 501 if (feof(DES_IN)) break;
@@ -539,16 +523,16 @@ void doencryption()
539 (unsigned int)rem); 523 (unsigned int)rem);
540 des_3cbc_encrypt( 524 des_3cbc_encrypt(
541 (des_cblock *)buf,(des_cblock *)obuf, 525 (des_cblock *)buf,(des_cblock *)obuf,
542 (long)l,ks,ks2,(des_cblock *)iv, 526 (long)l,ks,ks2,&iv,
543 (des_cblock *)iv2,do_encrypt); 527 &iv2,do_encrypt);
544 if (rem) memcpy(&(buf[l]),tmpbuf, 528 if (rem) memcpy(&(buf[l]),tmpbuf,
545 (unsigned int)rem); 529 (unsigned int)rem);
546 } 530 }
547 else 531 else
548 { 532 {
549 des_cbc_encrypt( 533 des_cbc_encrypt(
550 (des_cblock *)buf,(des_cblock *)obuf, 534 buf,obuf,
551 (long)l,ks,(des_cblock *)iv,do_encrypt); 535 (long)l,ks,&iv,do_encrypt);
552 if (l >= 8) memcpy(iv,&(obuf[l-8]),8); 536 if (l >= 8) memcpy(iv,&(obuf[l-8]),8);
553 } 537 }
554 if (rem) memcpy(buf,&(buf[l]),(unsigned int)rem); 538 if (rem) memcpy(buf,&(buf[l]),(unsigned int)rem);
@@ -614,14 +598,14 @@ void doencryption()
614 { 598 {
615 des_3cbc_encrypt( 599 des_3cbc_encrypt(
616 (des_cblock *)buf,(des_cblock *)obuf, 600 (des_cblock *)buf,(des_cblock *)obuf,
617 (long)l,ks,ks2,(des_cblock *)iv, 601 (long)l,ks,ks2,&iv,
618 (des_cblock *)iv2,do_encrypt); 602 &iv2,do_encrypt);
619 } 603 }
620 else 604 else
621 { 605 {
622 des_cbc_encrypt( 606 des_cbc_encrypt(
623 (des_cblock *)buf,(des_cblock *)obuf, 607 buf,obuf,
624 (long)l,ks,(des_cblock *)iv,do_encrypt); 608 (long)l,ks,&iv,do_encrypt);
625 if (l >= 8) memcpy(iv,&(buf[l-8]),8); 609 if (l >= 8) memcpy(iv,&(buf[l-8]),8);
626 } 610 }
627 611
@@ -646,9 +630,9 @@ void doencryption()
646 l=l-8+last; 630 l=l-8+last;
647 } 631 }
648 i=0; 632 i=0;
649 if (cflag) des_cbc_cksum((C_Block *)obuf, 633 if (cflag) des_cbc_cksum(obuf,
650 (C_Block *)cksum,(long)l/8*8,ks, 634 (des_cblock *)cksum,(long)l/8*8,ks,
651 (C_Block *)cksum); 635 (des_cblock *)cksum);
652 while (i != l) 636 while (i != l)
653 { 637 {
654 j=fwrite(obuf,1,(unsigned int)l-i,DES_OUT); 638 j=fwrite(obuf,1,(unsigned int)l-i,DES_OUT);
@@ -696,15 +680,8 @@ problems:
696 if (Exit) EXIT(Exit); 680 if (Exit) EXIT(Exit);
697 } 681 }
698 682
699int uufwrite(data, size, num, fp) 683/* We ignore this parameter but it should be > ~50 I believe */
700unsigned char *data; 684int uufwrite(unsigned char *data, int size, unsigned int num, FILE *fp)
701int size;
702unsigned int num;
703FILE *fp;
704
705 /* We ignore this parameter but it should be > ~50 I believe */
706
707
708 { 685 {
709 int i,j,left,rem,ret=num; 686 int i,j,left,rem,ret=num;
710 static int start=1; 687 static int start=1;
@@ -757,8 +734,7 @@ FILE *fp;
757 return(ret); 734 return(ret);
758 } 735 }
759 736
760void uufwriteEnd(fp) 737void uufwriteEnd(FILE *fp)
761FILE *fp;
762 { 738 {
763 int j; 739 int j;
764 static const char *end=" \nend\n"; 740 static const char *end=" \nend\n";
@@ -774,11 +750,8 @@ FILE *fp;
774 fwrite(end,1,strlen(end),fp); 750 fwrite(end,1,strlen(end),fp);
775 } 751 }
776 752
777int uufread(out, size, num, fp) 753/* int size: should always be > ~ 60; I actually ignore this parameter :-) */
778unsigned char *out; 754int uufread(unsigned char *out, int size, unsigned int num, FILE *fp)
779int size; /* should always be > ~ 60; I actually ignore this parameter :-) */
780unsigned int num;
781FILE *fp;
782 { 755 {
783 int i,j,tot; 756 int i,j,tot;
784 static int done=0; 757 static int done=0;
@@ -850,10 +823,7 @@ FILE *fp;
850 *((c)++)=(unsigned char)(((l) )&0xff)) 823 *((c)++)=(unsigned char)(((l) )&0xff))
851 824
852 825
853int uuencode(in, num, out) 826int uuencode(unsigned char *in, int num, unsigned char *out)
854unsigned char *in;
855int num;
856unsigned char *out;
857 { 827 {
858 int j,i,n,tot=0; 828 int j,i,n,tot=0;
859 DES_LONG l; 829 DES_LONG l;
@@ -883,10 +853,7 @@ unsigned char *out;
883 return(tot); 853 return(tot);
884 } 854 }
885 855
886int uudecode(in, num, out) 856int uudecode(unsigned char *in, int num, unsigned char *out)
887unsigned char *in;
888int num;
889unsigned char *out;
890 { 857 {
891 int j,i,k; 858 int j,i,k;
892 unsigned int n=0,space=0; 859 unsigned int n=0,space=0;