libsodium update to 0.7.0
[tomato.git] / release / src-rt-6.x.4708 / router / openssl / demos / maurice / example4.c
blobce629848b74fc6617cce73ba87fc1e887ef79eeb
1 /* NOCW */
2 /*
3 Please read the README file for condition of use, before
4 using this software.
6 Maurice Gittens <mgittens@gits.nl> January 1997
8 */
10 #include <stdio.h>
11 #include <unistd.h>
12 #include <fcntl.h>
13 #include <sys/stat.h>
14 #include <openssl/evp.h>
16 #define STDIN 0
17 #define STDOUT 1
18 #define BUFLEN 512
20 static const char *usage = "Usage: example4 [-d]\n";
22 void do_encode(void);
23 void do_decode(void);
25 int main(int argc, char *argv[])
27 if ((argc == 1))
29 do_encode();
31 else if ((argc == 2) && !strcmp(argv[1],"-d"))
33 do_decode();
35 else
37 fprintf(stderr,"%s", usage);
38 exit(1);
41 return 0;
44 void do_encode()
46 char buf[BUFLEN];
47 char ebuf[BUFLEN+24];
48 unsigned int ebuflen;
49 EVP_ENCODE_CTX ectx;
51 EVP_EncodeInit(&ectx);
53 while(1)
55 int readlen = read(STDIN, buf, sizeof(buf));
57 if (readlen <= 0)
59 if (!readlen)
60 break;
61 else
63 perror("read");
64 exit(1);
68 EVP_EncodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
70 write(STDOUT, ebuf, ebuflen);
73 EVP_EncodeFinal(&ectx, ebuf, &ebuflen);
75 write(STDOUT, ebuf, ebuflen);
78 void do_decode()
80 char buf[BUFLEN];
81 char ebuf[BUFLEN+24];
82 unsigned int ebuflen;
83 EVP_ENCODE_CTX ectx;
85 EVP_DecodeInit(&ectx);
87 while(1)
89 int readlen = read(STDIN, buf, sizeof(buf));
90 int rc;
92 if (readlen <= 0)
94 if (!readlen)
95 break;
96 else
98 perror("read");
99 exit(1);
103 rc = EVP_DecodeUpdate(&ectx, ebuf, &ebuflen, buf, readlen);
104 if (rc <= 0)
106 if (!rc)
108 write(STDOUT, ebuf, ebuflen);
109 break;
112 fprintf(stderr, "Error: decoding message\n");
113 return;
116 write(STDOUT, ebuf, ebuflen);
119 EVP_DecodeFinal(&ectx, ebuf, &ebuflen);
121 write(STDOUT, ebuf, ebuflen);