diff options
Diffstat (limited to 'src/lib/libcrypto/des/des.c')
-rw-r--r-- | src/lib/libcrypto/des/des.c | 121 |
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 | ||
95 | void usage(void); | 95 | void usage(void); |
96 | void doencryption(void); | 96 | void doencryption(void); |
97 | int uufwrite(unsigned char *data, int size, unsigned int num, FILE *fp); | 97 | int 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); | |||
102 | void des_3cbc_encrypt(des_cblock *input,des_cblock *output,long length, | 102 | void 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 | ||
106 | void usage(); | ||
107 | void doencryption(); | ||
108 | int uufwrite(); | ||
109 | void uufwriteEnd(); | ||
110 | int uufread(); | ||
111 | int uuencode(); | ||
112 | int uudecode(); | ||
113 | void 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 | ||
139 | int vflag,cflag,eflag,dflag,kflag,bflag,fflag,sflag,uflag,flag3,hflag,error; | 128 | int vflag,cflag,eflag,dflag,kflag,bflag,fflag,sflag,uflag,flag3,hflag,error; |
140 | 129 | ||
141 | int main(argc, argv) | 130 | int main(int argc, char **argv) |
142 | int argc; | ||
143 | char **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 | ||
334 | void usage() | 321 | void 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.", |
361 | NULL | 348 | NULL |
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 | ||
372 | void doencryption() | 359 | void 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 | ||
699 | int uufwrite(data, size, num, fp) | 683 | /* We ignore this parameter but it should be > ~50 I believe */ |
700 | unsigned char *data; | 684 | int uufwrite(unsigned char *data, int size, unsigned int num, FILE *fp) |
701 | int size; | ||
702 | unsigned int num; | ||
703 | FILE *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 | ||
760 | void uufwriteEnd(fp) | 737 | void uufwriteEnd(FILE *fp) |
761 | FILE *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 | ||
777 | int uufread(out, size, num, fp) | 753 | /* int size: should always be > ~ 60; I actually ignore this parameter :-) */ |
778 | unsigned char *out; | 754 | int uufread(unsigned char *out, int size, unsigned int num, FILE *fp) |
779 | int size; /* should always be > ~ 60; I actually ignore this parameter :-) */ | ||
780 | unsigned int num; | ||
781 | FILE *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 | ||
853 | int uuencode(in, num, out) | 826 | int uuencode(unsigned char *in, int num, unsigned char *out) |
854 | unsigned char *in; | ||
855 | int num; | ||
856 | unsigned 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 | ||
886 | int uudecode(in, num, out) | 856 | int uudecode(unsigned char *in, int num, unsigned char *out) |
887 | unsigned char *in; | ||
888 | int num; | ||
889 | unsigned 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; |