]>
Commit | Line | Data |
---|---|---|
d02b48c6 RE |
1 | /* NOCW */ |
2 | /* | |
3 | Please read the README file for condition of use, before | |
4 | using this software. | |
5 | ||
6 | Maurice Gittens <mgittens@gits.nl> January 1997 | |
7 | ||
8 | */ | |
9 | ||
10 | #include <stdio.h> | |
11 | #include <fcntl.h> | |
12 | #include <sys/stat.h> | |
13 | #include <evp.h> | |
14 | ||
15 | #define STDIN 0 | |
16 | #define STDOUT 1 | |
17 | #define BUFLEN 512 | |
18 | #define INIT_VECTOR "12345678" | |
19 | #define ENCRYPT 1 | |
20 | #define DECRYPT 0 | |
21 | #define ALG EVP_des_ede3_cbc() | |
22 | ||
23 | static const char *usage = "Usage: example3 [-d] password\n"; | |
24 | ||
25 | void do_cipher(char *,int); | |
26 | ||
27 | int main(int argc, char *argv[]) | |
28 | { | |
29 | if ((argc == 2)) | |
30 | { | |
31 | do_cipher(argv[1],ENCRYPT); | |
32 | } | |
33 | else if ((argc == 3) && !strcmp(argv[1],"-d")) | |
34 | { | |
35 | do_cipher(argv[2],DECRYPT); | |
36 | } | |
37 | else | |
38 | { | |
39 | fprintf(stderr,"%s", usage); | |
40 | exit(1); | |
41 | } | |
42 | ||
43 | return 0; | |
44 | } | |
45 | ||
46 | void do_cipher(char *pw, int operation) | |
47 | { | |
48 | char buf[BUFLEN]; | |
49 | char ebuf[BUFLEN + 8]; | |
50 | unsigned int ebuflen, rc; | |
51 | unsigned char iv[EVP_MAX_IV_LENGTH], key[EVP_MAX_KEY_LENGTH]; | |
52 | unsigned int ekeylen, net_ekeylen; | |
53 | EVP_CIPHER_CTX ectx; | |
54 | ||
55 | memcpy(iv, INIT_VECTOR, sizeof(iv)); | |
56 | ||
57 | EVP_BytesToKey(ALG, EVP_md5(), "salu", pw, strlen(pw), 1, key, iv); | |
58 | ||
59 | EVP_CipherInit(&ectx, ALG, key, iv, operation); | |
60 | ||
61 | while(1) | |
62 | { | |
63 | int readlen = read(STDIN, buf, sizeof(buf)); | |
64 | ||
65 | if (readlen <= 0) | |
66 | { | |
67 | if (!readlen) | |
68 | break; | |
69 | else | |
70 | { | |
71 | perror("read"); | |
72 | exit(1); | |
73 | } | |
74 | } | |
75 | ||
76 | EVP_CipherUpdate(&ectx, ebuf, &ebuflen, buf, readlen); | |
77 | ||
78 | write(STDOUT, ebuf, ebuflen); | |
79 | } | |
80 | ||
81 | EVP_CipherFinal(&ectx, ebuf, &ebuflen); | |
82 | ||
83 | write(STDOUT, ebuf, ebuflen); | |
84 | } | |
85 | ||
86 |