123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /* NOCW */
- /*
- Please read the README file for condition of use, before
- using this software.
- Maurice Gittens <mgittens@gits.nl> January 1997
- */
- #include <stdio.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <openssl/evp.h>
- #define STDIN 0
- #define STDOUT 1
- #define BUFLEN 512
- static const char *usage = "Usage: example4 [-d]\n";
- void do_encode(void);
- void do_decode(void);
- int main(int argc, char *argv[])
- {
- if ((argc == 1))
- {
- do_encode();
- }
- else if ((argc == 2) && !strcmp(argv[1],"-d"))
- {
- do_decode();
- }
- else
- {
- fprintf(stderr,"%s", usage);
- exit(1);
- }
- return 0;
- }
- void do_encode()
- {
- char buf[BUFLEN];
- char ebuf[BUFLEN+24];
- unsigned int ebuflen;
- EVP_ENCODE_CTX ectx;
-
- EVP_EncodeInit(&ectx);
- while(1)
- {
- int readlen = read(STDIN, buf, sizeof(buf));
-
- if (readlen <= 0)
- {
- if (!readlen)
- break;
- else
- {
- perror("read");
- exit(1);
- }
- }
- EVP_EncodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
- write(STDOUT, ebuf, ebuflen);
- }
- EVP_EncodeFinal(&ectx, ebuf, &ebuflen);
- write(STDOUT, ebuf, ebuflen);
- }
- void do_decode()
- {
- char buf[BUFLEN];
- char ebuf[BUFLEN+24];
- unsigned int ebuflen;
- EVP_ENCODE_CTX ectx;
-
- EVP_DecodeInit(&ectx);
- while(1)
- {
- int readlen = read(STDIN, buf, sizeof(buf));
- int rc;
-
- if (readlen <= 0)
- {
- if (!readlen)
- break;
- else
- {
- perror("read");
- exit(1);
- }
- }
- rc = EVP_DecodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
- if (rc <= 0)
- {
- if (!rc)
- {
- write(STDOUT, ebuf, ebuflen);
- break;
- }
- fprintf(stderr, "Error: decoding message\n");
- return;
- }
- write(STDOUT, ebuf, ebuflen);
- }
- EVP_DecodeFinal(&ectx, ebuf, &ebuflen);
- write(STDOUT, ebuf, ebuflen);
- }
|