/[pkg-mixmaster]/branches/mixmaster_2_9_STABLE/Mix/Src/pgptest.c
ViewVC logotype

Contents of /branches/mixmaster_2_9_STABLE/Mix/Src/pgptest.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 132 - (hide annotations) (download)
Tue Aug 13 16:16:07 2002 UTC (10 years, 9 months ago) by weaselp
Original Path: trunk/Mix/Src/pgptest.c
File MIME type: text/plain
File size: 5530 byte(s)
Small fix for mpgp on windows <3D592D8C.8ACA2A@saiknes.lv>
1 rabbi 1 /* PGP module test */
2    
3     /* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
4     ANY KIND, either express or implied. See the file COPYRIGHT for
5     details. */
6    
7     #include "mix3.h"
8     #include "pgp.h"
9     #include <stdlib.h>
10     #include <string.h>
11     #include <fcntl.h>
12     #include <assert.h>
13     #include <sys/types.h>
14     #include <sys/stat.h>
15     #include <time.h>
16     #include <fcntl.h>
17     #ifdef POSIX
18     #include <unistd.h>
19     #include <termios.h>
20     #endif
21    
22     int pass(BUFFER *b)
23     {
24     char p[LINELEN];
25     int fd;
26     int n;
27    
28     #ifdef HAVE_TERMIOS
29     struct termios attr;
30     #endif
31    
32     fprintf(stderr, "enter passphrase: ");
33     fflush(stderr);
34     #ifdef HAVE_TERMIOS
35     fd = open("/dev/tty", O_RDONLY);
36     if (tcgetattr(fd, &attr) != 0)
37     return (-1);
38     attr.c_lflag &= ~ECHO;
39     attr.c_lflag |= ICANON;
40     if (tcsetattr(fd, TCSAFLUSH, &attr) != 0)
41     return (-1);
42     n = read(fd, p, LINELEN);
43    
44     attr.c_lflag |= ECHO;
45     if (tcsetattr(fd, TCSAFLUSH, &attr) != 0)
46     return (-1);
47     close(fd);
48     p[n - 1] = 0;
49    
50     #else
51     fgets(p, LINELEN, stdin);
52 weaselp 132 if (p[strlen(p)-1]=='\n')
53     p[strlen(p)-1] = 0;
54 rabbi 1 #endif
55    
56     fprintf(stderr, "\n");
57     buf_appends(b, p);
58     return (0);
59     }
60    
61     void usage(char *n)
62     {
63     fprintf(stderr, "Usage: %s -e [-b] user@domain\n", n);
64     fprintf(stderr, " %s -s [-b] [yourname@domain]\n", n);
65     fprintf(stderr, " %s -c [-b]\n", n);
66     fprintf(stderr, " %s -d [passphrase]\n", n);
67     fprintf(stderr, " %s -g[r] yourname@domain [bits]\n", n);
68     fprintf(stderr, " %s -a[+-] [-b]\n\n", n);
69     fprintf(stderr, "PGP public key ring: %s\n", PGPPUBRING);
70     fprintf(stderr, "PGP secret key ring: %s\n", PGPSECRING);
71     }
72    
73     int decrypt(BUFFER *u, BUFFER *option, char *n)
74     {
75     BUFFER *v;
76     BUFFER *sig;
77     int err = 0;
78    
79     v = buf_new();
80     sig = buf_new();
81    
82     buf_set(v, u);
83     err = pgp_decrypt(v, NULL, sig, PGPPUBRING, PGPSECRING);
84     if (err >= 0 || err == PGP_SIGBAD)
85     buf_move(u, v);
86    
87     if (err == PGP_ERR) {
88     pass(option);
89     err = pgp_decrypt(u, option, sig, PGPPUBRING, PGPSECRING);
90     }
91     switch (err) {
92     case PGP_NOMSG:
93     fprintf(stderr, "%s: Not a PGP message.\n", n);
94     break;
95     case PGP_ERR:
96     fprintf(stderr, "%s: Can't read message.\n", n);
97     break;
98     case PGP_SIGOK:
99     fprintf(stderr, "%s: Valid signature: %s\n", n, sig->data);
100     err = 0;
101     break;
102     case PGP_SIGNKEY:
103     fprintf(stderr, "%s: Unknown signature key %s, cannot verify.\n", n, sig->data);
104     err = 1;
105     break;
106     case PGP_SIGBAD:
107     fprintf(stderr, "%s: Bad signature.\n", n);
108     err = 1;
109     break;
110     }
111    
112     buf_free(v);
113     buf_free(sig);
114    
115     return (err);
116     }
117    
118     int main(int argc, char *argv[])
119     {
120     BUFFER *u, *option, *pp;
121     char *filename = NULL;
122     char *cmd = NULL;
123     int text = 1;
124     int err = 99;
125     int bits = 0;
126    
127     mix_init(NULL);
128     VERBOSE = 3;
129    
130     u = buf_new();
131     option = buf_new();
132     pp = buf_new();
133    
134     if (argc > 1 && argv[1][0] == '-')
135     cmd = argv[1];
136    
137     if (argc == 1 || (cmd > 0 && (cmd[1] == 'e' || cmd[1] == 'c' ||
138     cmd[1] == 'd' || cmd[1] == 'a' ||
139     cmd[1] == 's' || cmd[1] == 'C'))) {
140     if ((argc > 2 && (cmd == NULL || cmd[1] == 'a')) || argc > 3) {
141     FILE *f;
142    
143     f = fopen(argv[argc - 1], "rb");
144     if (f == NULL) {
145     fprintf(stderr, "%s: Can't open %s\n", argv[0], argv[argc - 1]);
146     err = -1;
147     } else {
148     buf_read(u, f);
149     fclose(f);
150     filename = argv[argc - 1];
151     argc--;
152     }
153     } else
154     buf_read(u, stdin);
155     }
156     if (argc == 1)
157     err = decrypt(u, option, argv[0]);
158    
159     if (argc > 2 && argv[2][0] == '-' && argv[2][1] == 'b') {
160     text = 0;
161     if (argc > 3)
162     buf_appends(option, argv[3]);
163     } else if (argc > 2)
164     buf_appends(option, argv[2]);
165    
166     if (cmd)
167     switch (cmd[1]) {
168     case 's':
169     err = pgp_encrypt(PGP_SIGN | (text ? PGP_TEXT : 0), u, NULL, option,
170     NULL, PGPPUBRING, PGPSECRING);
171     if (err != 0) {
172     pass(pp);
173     err = pgp_encrypt(PGP_SIGN | (text ? PGP_TEXT : 0), u, NULL, option,
174     pp, PGPPUBRING, PGPSECRING);
175     }
176     if (err != 0)
177     fprintf(stderr, "Error.\n");
178     break;
179     case 'e':
180     if (option->length) {
181     err = pgp_encrypt(PGP_ENCRYPT | (text ? PGP_TEXT : 0), u, option, NULL,
182     NULL, PGPPUBRING, PGPSECRING);
183     if (err < 0)
184     fprintf(stderr, "%s: can't encrypt message for %s\n",
185     argv[0], argv[2]);
186     }
187     break;
188     case 'c':
189     pass(option);
190     err = pgp_encrypt(PGP_CONVENTIONAL | (text ? PGP_TEXT : 0), u, option,
191     NULL, NULL, PGPPUBRING, PGPSECRING);
192     if (err < 0)
193     fprintf(stderr, "%s: can't encrypt message\n", argv[0]);
194     break;
195     case 'C':
196     pass(option);
197     err = pgp_encrypt(PGP_NCONVENTIONAL | (text ? PGP_TEXT : 0), u, option,
198     NULL, NULL, PGPPUBRING, PGPSECRING);
199     if (err < 0)
200     fprintf(stderr, "%s: can't encrypt message\n", argv[0]);
201     break;
202     case 'g':
203     if (argc < 3) {
204     err = 99;
205     goto end;
206     }
207     pass(pp);
208     if (argc == 4)
209     sscanf(argv[3], "%d", &bits);
210     err = pgp_keygen(cmd[2] == 'r' ? PGP_ES_RSA : PGP_E_ELG,
211     bits, option, pp, PGPPUBRING, PGPSECRING, 0);
212     break;
213     case 'a':
214     switch (cmd[2]) {
215     case '-':
216     err = pgp_dearmor(u, u);
217     if (err == -1)
218     fprintf(stderr, "Not a PGP-armored message\n");
219     goto end;
220     case '+':
221     break;
222     default:
223     pgp_literal(u, filename, text);
224     pgp_compress(u);
225     break;
226     }
227     err = pgp_armor(u, 0);
228     break;
229     case 'd':
230     err = decrypt(u, option, argv[0]);
231     break;
232     }
233     end:
234     if (err == 99)
235     usage(argv[0]);
236    
237     if (err >= 0)
238     buf_write(u, stdout);
239    
240     buf_free(option);
241     buf_free(pp);
242     buf_free(u);
243    
244     mix_exit();
245     return (err == -1 ? 1 : err);
246     }

  ViewVC Help
Powered by ViewVC 1.1.5