diff options
| author | beck <> | 1999-09-29 04:37:45 +0000 |
|---|---|---|
| committer | beck <> | 1999-09-29 04:37:45 +0000 |
| commit | de8f24ea083384bb66b32ec105dc4743c5663cdf (patch) | |
| tree | 1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libcrypto/des/des.c | |
| parent | cb929d29896bcb87c2a97417fbd03e50078fc178 (diff) | |
| download | openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.gz openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.bz2 openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.zip | |
OpenSSL 0.9.4 merge
Diffstat (limited to '')
| -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; |
