-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathread_args.c
120 lines (111 loc) · 4.02 KB
/
read_args.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* read_args.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: vbrazas <vbrazas@student.unit.ua> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2018/02/01 16:03:55 by vbrazas #+# #+# */
/* Updated: 2018/03/20 17:34:05 by vbrazas ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_ssl.h"
static int put_endres(char **av, t_fl *fl)
{
char buf[17];
ssize_t ret;
if (!((fl->iv_buf)[0]) && fl->cbc_mode)
{
ft_putstr("enter des initial vector: ");
ret = read(0, fl->iv_buf, 17);
(fl->iv_buf)[ret - 1] = '\0';
ft_putstr("Verifying - enter again des initial vector: ");
ret = read(0, buf, 17);
buf[ret - 1] = '\0';
if (ft_strncmp(fl->iv_buf, buf, 17))
return ((error(-2, av, NULL, 0)));
}
if (fl->base64)
return (put_base64(av, fl, 0, 0));
else if (fl->des_ecb || fl->des_cbc || fl->des3)
return (put_des(av, fl, 0, 0));
return (-1);
}
static int check_args(char **av, t_fl *fl)
{
char buf[17];
ssize_t ret;
if (!((fl->k)[0]) && !fl->base64)
{
ft_putstr("enter des encryption key: ");
ret = read(0, fl->k, (fl->des3 ? 49 : 17));
(fl->k)[ret - 1] = '\0';
ft_putstr("Verifying - enter again des encryption key: ");
ret = read(0, buf, (fl->des3 ? 49 : 17));
buf[ret - 1] = '\0';
if (ft_strncmp(fl->k, buf, (fl->des3 ? 49 : 17)))
return ((error(-2, av, NULL, 0)));
}
put_endres(av, fl);
return (0);
}
static int help_read_args(char **av, t_fl *fl, int i)
{
if (!(ft_strcmp(av[i], "-e")))
return ((fl->encrypt = 1));
else if (!(ft_strcmp(av[i], "-d")))
return ((fl->decrypt = 1));
else if (!(ft_strcmp(av[i], "-a")) || !(ft_strcmp(av[i], "-base64")))
return ((fl->a = 1));
else if (!(ft_strcmp(av[i], "-bufsize")))
fl->bufs = ft_atoi(av[++i]);
return (-1);
}
static int read_args(int ac, char **av, t_fl *fl, int i)
{
int i_buf;
i_buf = i;
while (av[++i])
{
if ((!(ft_strcmp(av[i], "-k")) || !(ft_strcmp(av[i], "-K")) || \
!(ft_strcmp(av[i], "-iv")) || !(ft_strcmp(av[i], "-v")) || \
!(ft_strcmp(av[i], "-bufsize"))) && \
(!av[i + 1] || !ft_isalnum(av[i + 1][0])))
return ((error(ac, av, (char *)1, i)));
else if ((!(ft_strcmp(av[i], "-in")) || !(ft_strcmp(av[i], "-i")) || \
!(ft_strcmp(av[i], "-out")) || !(ft_strcmp(av[i], "-o"))) && !av[i + 1])
return ((error(ac, av, (char *)1, i)));
else if (!(ft_strcmp(av[i], "-in")) || !(ft_strcmp(av[i], "-i")))
fl->in = av[++i];
else if (!(ft_strcmp(av[i], "-out")) || !(ft_strcmp(av[i], "-o")))
fl->out = av[++i];
else if (!(ft_strcmp(av[i], "-k")) || !(ft_strcmp(av[i], "-K")))
ft_strncpy(fl->k, av[++i], (fl->des3 ? 48 : 16));
else if (!(ft_strcmp(av[i], "-iv")) || !(ft_strcmp(av[i], "-v")))
ft_strncpy(fl->iv_buf, av[++i], 16);
else if ((help_read_args(av, fl, i)) == -1)
return ((error(ac, av, NULL, i)));
}
return (check_args(av, fl));
}
int read_command(int ac, char **av, t_fl *fl, int i)
{
if (!(ft_strcmp(av[i], "base64")))
fl->base64 = 1;
else if (!(ft_strcmp(av[i], "des")) || !(ft_strcmp(av[i], "des-ecb")))
fl->des_ecb = 1;
else if (!(ft_strcmp(av[i], "des-cbc")))
fl->des_cbc = 1;
else if (!(ft_strcmp(av[i], "des3")) || \
!(ft_strcmp(av[i], "des-ede3-cbc")) || !(ft_strcmp(av[i], "des3-cbc")))
fl->des3_cbc = 1;
else if (!(ft_strcmp(av[i], "des-ede3")) || !(ft_strcmp(av[i], "des3-ecb")))
fl->des3_ecb = 1;
else
return ((error(2, av, NULL, i)));
if (fl->des3_ecb || fl->des3_cbc)
fl->des3 = 1;
if (fl->des3_cbc || fl->des_cbc)
fl->cbc_mode = 1;
return (read_args(ac, av, fl, i));
}